#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 отметьте ответ, если это помогло.