javascript - Simular a função padrão do DayJs junto com seus métodos encadeados
Estou tentando simular a função padrão dayjs() com data e hora específicas e também quero simular seus métodos aninhados, ou seja, utc() e add()
Isto é o que eu tentei até agora:
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'));
});
Mas recebendo isto: TypeError: dayjs_1.default não é uma função
Qualquer ajuda/sugestão é apreciada.
Resposta #1
MockDate funciona muito bem para isso, sem código intenso de simulação necessário.
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
Lembre-se de limpar o mock após o seu teste com: MockDate.reset();
Resposta #2
Para operações básicas com o dayjs, este código funciona:
jest.mock('dayjs', () => jest.fn((...args) => jest.requireActual('dayjs')(args.filter((arg) => arg).length > 0 ? args : '2020-08-12')),);
Quando '2020-08-12' é a data que você quer simular.
