javascript - Chained yöntemleri ile birlikte DayJs varsayılan fonksiyonunu taklit et


Belirli bir tarih ve saat ile dayjs() varsayılan fonksiyonunu taklit etmeye çalışıyorum ve ayrıca onun iç içe geçmiş yöntemlerini yani utc() ve add() yöntemlerini de taklit etmek istiyorum

Şu ana kadar denediğim şey şunlar:

abc.ts:

getEarliestDate() {
    const {
        minHour,
        maxHour
    } = operatingHours;
    const earliestDateTime = dayjs().add(sla + 1, 'minute');
    const earliestDateTimeUTC = earliestDateTime.utc();

    return dayjs().add(121, 'minute').format('YYYY-MM-DD HH:mm');
}

abc.test.ts:

import { abc } from '../../src/common/serviceFactory';
import dayjs from 'dayjs';

jest.mock('dayjs', () =>
  jest.fn((...args) => jest.requireActual('dayjs')(args.filter((arg) => arg).length > 0 ? args : '2020-08-12')),
);

jest.mock('dayjs', () => ({
  default: jest.requireActual('dayjs')(`2020-08-18 12:00:00`),
  extend: jest.fn(),
  utc: jest.fn((...args) => {
    const dayjs = jest.requireActual('dayjs');
    dayjs.extend(jest.requireActual('dayjs/plugin/utc'));

    return dayjs.utc(args.filter((arg) => arg).length > 0 ? args : '12:00:00').startOf('day');
  }),
  add: jest.requireActual('dayjs')(`2020-08-18 12:00:00`),
}));

describe('getEarliestDate Function', () => {
  it('should return earliest date response', () => {
    const earliestDate = abc.getEarliestDate();
    expect(earliestDate).toMatch(dayjs().add(121, 'minute').format('YYYY-MM-DD HH:mm'));
  });

Ama bunu almak: TypeError: dayjs_1.default bir fonksiyon değil

Her türlü yardım/öneri takdir edilir.

Cevap #1

MockDate bunun için harika çalışıyor, yoğun taklit kodu gerekmiyor.

https://www.npmjs.com/package/mockdate

import MockDate from 'mockdate'
import dayjs from 'dayjs'

MockDate.set('2000-11-22')
console.log(dayjs.format())

// >>> 2000-11-22T00:00:00Z

Testinizden sonra sahte zamanı temizlemeyi unutmayın: MockDate.reset();

Cevap #2

dayjs ile temel işlemler için bu kod çalışır:

jest.mock('dayjs', () => jest.fn((...args) => jest.requireActual('dayjs')(args.filter((arg) => arg).length > 0 ? args : '2020-08-12')),);

'2020-08-12' tarihini taklit etmek istediğinizde.

İlgili makaleler