您好,登錄后才能下訂單哦!
在Jest測試中,有時候需要對定時器(如setTimeout、setInterval等)進行模擬,以便更好地控制測試流程和避免實際等待
要在Jest中模擬定時器,你可以使用jest.useFakeTimers()
方法。這會告訴Jest使用模擬的定時器而不是實際的定時器。然后,你可以使用jest.advanceTimersByTime()
或jest.runOnlyPendingTimers()
方法來控制定時器的執行。
下面是一個簡單的示例:
// myFunction.js
function myFunction(callback) {
setTimeout(() => {
callback('Hello, World!');
}, 1000);
}
module.exports = myFunction;
// myFunction.test.js
const myFunction = require('./myFunction');
describe('myFunction', () => {
beforeEach(() => {
jest.useFakeTimers(); // 使用模擬的定時器
});
afterEach(() => {
jest.clearAllTimers(); // 清除所有定時器
});
it('should call the callback after 1 second', () => {
const callback = jest.fn();
myFunction(callback);
expect(callback).not.toBeCalled(); // 此時回調函數還未被調用
jest.advanceTimersByTime(500); // 模擬過去了500ms
expect(callback).not.toBeCalled(); // 回調函數仍未被調用
jest.advanceTimersByTime(500); // 再模擬過去了500ms
expect(callback).toBeCalledWith('Hello, World!'); // 回調函數現在應該被調用了
});
});
在這個示例中,我們首先使用jest.useFakeTimers()
啟用模擬定時器。然后,在測試用例中,我們使用jest.advanceTimersByTime()
方法來模擬時間的流逝。最后,我們檢查回調函數是否在預期的時間內被調用。
注意:當使用模擬定時器時,請確保在每個測試用例之后調用jest.clearAllTimers()
,以清除所有定時器并避免潛在的錯誤。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。