Убедитесь, что новое значение Date () в тесте sinon соответствует значению в коде

#typescript #sinon

#typescript #sinon

Вопрос:

Прошу прощения, если это настоящий базовый запрос, я относительно новичок в sinon, и я изо всех сил пытался найти кого-нибудь, пытающегося делать именно то, что я делаю.

В моем коде я генерирую строку ISO, используя new Date(), если значение отсутствует:

 const toDateTimeParameter: string = encodeURIComponent(new Date().toISOString());
 

В моем тесте я также генерирую новое значение Date () для сравнения с:

 const toDateTime: string = encodeURIComponent(new Date().toISOString());
 

Возможно, вы сможете увидеть, к чему это приводит, но поскольку эти экземпляры Date генерируются не в одно и то же время, они не совпадают (1-2 мс). Очевидно, что трудно предсказать точную дисперсию (и я бы предпочел этого не делать в любом случае), так есть ли способ выровнять два значения?

Ошибка примера:

 AssertionError [ERR_ASSERTION]: Input A expected to strictly equal input B:
  expected - actual

- 'https://example.com(fromDateTime=2019-11-01,toDateTime=2020-12-16T21:48:00.520Z)'
  'https://example.com(fromDateTime=2019-11-01,toDateTime=2020-12-16T21:48:00.519Z)'
        expected - actual
 

Ответ №1:

Sinon предоставляет утилиту под названием поддельные таймеры, которые позволяют контролировать дату и время. Вы можете создать дату и передать эту дату useFakeTimers , чтобы указать, какой должна быть дата / время для этого теста:

 afterEach(() => {
  // need to restore if you want date to not be stubbed by sinon
  sinon.restore();
});

it('should do something', () => {
  // create a date to indicate current date/time
  const now = new Date();
  // pass that date to useFakeTimers
  sinon.useFakeTimers(now);
  const expected = toDateTime();
  const actual = now.toISOString();
  assert.strictEqual(actual, expected); // or whatever assertion you do
});
 

Надеюсь, это поможет!

Комментарии:

1. Блестяще, спасибо. Кажется, теперь это работает каждый раз.

2. Приятно слышать! @LeeFord отметьте ответ, если это помогло.