Імітації таймерів
Глобальні функції-таймери (наприклад, setTimeout()
, setInterval()
, clearTimeout()
, clearInterval()
) є проблемними для тестового середовища, оскільки вони спираються на реальний час. Jest вміє підміняти їх, щоб ви могли керувати часом. Great Scott!
info
Також див. документацію API імітацій таймерів.
Ввімкнення фіктивних таймерів
В прикладі нижче, викликаючи jest.useFakeTimers()
, ми вмикаємо фіктивні таймери. Це замінює оригінальну реалізацію setTimeout()
та інші функції-таймери. Функції-таймери можна повернути до своєї оригінальної поведінки викликом jest.useRealTimers()
.
timerGame.js
function timerGame(callback) {
console.log('Ready....go!');
setTimeout(() => {
console.log("Time's up -- stop!");
callback && callback();
}, 1000);
}
module.exports = timerGame;
__tests__/timerGame-test.js
jest.useFakeTimers();
jest.spyOn(global, 'setTimeout');
test('waits 1 second before ending the game', () => {
const timerGame = require('../timerGame');
timerGame();
expect(setTimeout).toHaveBeenCalledTimes(1);
expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000);
});