Я пытаюсь выяснить, как смоделировать вызов Date.now с помощью jest в моем приложении js.
У меня есть метод репозитория, который мягко удаляет ресурс
async destroy(uuid: string): Promise<boolean> {
await this.userRepository.update({ userUUID: uuid }, { deletedDate: Date.now() });
return true;
}
для мягкого удаления, мы просто добавляем временную метку, когда его попросили удалить
После некоторых обсуждений здесь и на других сайтах я придумал этот тест.
describe('destroy', () => {
it('should delete a user schemas in the user data store', async () => {
const getNow = () => Date.now();
jest
.spyOn(global.Date, 'now')
.mockImplementationOnce(() =>
Date.now().valueOf()
);
const targetResource = 'some-uuid';
const result = await service.destroy(targetResource);
expect(result).toBeTruthy();
expect(userRepositoryMock.update).toHaveBeenCalledWith({ userUUID: targetResource }, { deletedDate: getNow() });
});
});
I Предполагается, что .spyOn (global.Date) дразнил всю глобальную функцию dat, но Date.now () в моем репозитории по-прежнему возвращает фактическую дату, а не mock.
Мой вопрос, есть ли способ предоставить фиктивное возвращаемое значение Date.now, вызываемого в репозитории из теста, или я должен просто DI внедрить DateProvider в класс репозитория, который я затем могу смоделировать из своего теста?