jest машинопись - конструктор Mock Date - PullRequest
3 голосов
/ 29 марта 2020

Я пытаюсь издеваться new Date(), чтобы вернуть указанную c дату. Следующий код:

const now = new Date()
jest.spyOn(global, 'Date').mockImplementation(() => now)

выдает ошибку компиляции: Argument of type '() => Date' is not assignable to parameter of type '() => string'. Type 'Date' is not assignable to type 'string'.

Я думаю, причина в том, что Jest думает, что я пытаюсь высмеять Date() вместо new Date() , Действительно, Date() возвращает строку. Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 29 марта 2020

Обходной путь - использовать библиотеку mockdate , которую можно использовать для изменения, когда установлено значение "сейчас".

const MockDate = require('mockdate');

test('Mock Date to change when "now" is', () => {
  console.log('Normal:   ', new Date().getTime());

  MockDate.set(new Date(1466424490000));

  console.log('Mocked:   ', new Date().getTime());

  MockDate.reset();

  console.log('Restored: ', new Date().getTime());
});

И результат теста будет следующим:

$ npm run test
> jest

 PASS  src/test.ts
  ✓ Mock Date to change when "now" is (8ms)

  console.log src/test.ts:4
    Normal:    1585505136315

  console.log src/test.ts:8
    Mocked:    1466424490000

  console.log src/test.ts:12
    Restored:  1585505136322

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        1.804s

См. справочный проект на GitHub .

...