Simulateurs de temporisation
Les fonctions de temporisation natives (c'est-à-dire setTimeout()
, setInterval()
, clearTimeout()
, clearInterval()
) sont moins adaptées à un environnement de test, car elles dépendent du temps réel pour s'écouler. Jest peut remplacer les temporisateurs par des fonctions qui vous permettent de contrôler le temps qui passe. Great Scott !
info
Consultez aussi la documentation de l'API des faux temporisateurs.
Activer les faux temporisateurs
Dans l'exemple suivant, nous activons les faux temporisateurs en appelant jest.useFakeTimers()
. Ceci remplace l'implémentation originale setTimeout()
et d'autres fonctions de temporisation. Les temporisateurs peuvent être restaurés à leur comportement normal avec jest.useRealTimers()
.
timerGame.js
function timerGame(callback) {
console.log('Prêt .... partez !');
setTimeout(() => {
console.log("Le temps est écoulé -- arrêtez !");
callback && callback();
}, 1000);
}
module.exports = timerGame;
__tests__/timerGame-test.js
jest.useFakeTimers();
jest.spyOn(global, 'setTimeout');
test(''attend 1 seconde avant de mettre fin au jeu', () => {
const timerGame = require('../timerGame');
timerGame();
expect(setTimeout).toHaveBeenCalledTimes(1);
expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000);
});