Связанный пост: setTimeout не срабатывает при использовании фальшивых таймеров Синона
Проблема с Github: https://github.com/sinonjs/fake-timers/issues/194#issuecomment -395224370
Вы можете решить эту проблему двумя способами.
- Подумайте, требует ли ваш тестовый случай задержки 5000 мс.
В модульном тесте должен проверяться код logi c, это не интеграционные тесты. Так что, может быть, вам просто нужно проверить утверждение, что функция wait
должна вызываться с параметром. Достаточно. Нам не нужно ждать задержки 5000 мс в тестовом случае.
Если вы настаиваете, хотите использовать
sinon.useFakeTimers()
и
clock.tick(5000)
.
Из соответствующего поста, мы можем сделать это так:
index.ts
:
async function wait(time: number, clock?) {
return new Promise((resolve) => {
setTimeout(resolve, time);
clock && clock.tick(time);
});
}
export async function main(time, /* for testing */ clock?) {
await wait(time, clock);
console.log('main');
}
index.test.ts
:
import { main } from './';
import sinon, { SinonFakeTimers } from 'sinon';
describe('60617715', () => {
let clock: SinonFakeTimers;
beforeEach(() => {
clock = sinon.useFakeTimers();
});
afterEach(() => {
clock.restore();
});
it('should pass', async () => {
await main(5000, clock);
});
});
Результаты модульного теста:
60617715
main
✓ should pass
1 passing (9ms)