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.
