7
我想單元測試在我的process.on('SIGTERM')
回調中使用Jest的計時器,但它似乎永遠不會被調用。我正在使用jest.useFakeTimers()
,雖然它似乎在某種程度上模擬了setTimeout
調用,但它在檢查時並不會在setTimeout.mock
對象中結束。NodeJS - Jest單元測試setTimeout在process.on回調
我index.js文件:
process.on('SIGTERM',() => {
console.log('Got SIGTERM');
setTimeout(() => {
console.log('Timer was run');
}, 300);
});
setTimeout(() => {
console.log('Timer 2 was run');
}, 30000);
和測試文件:
describe('Test process SIGTERM handler',() => {
test.only('runs timeout',() => {
jest.useFakeTimers();
process.exit = jest.fn();
require('./index.js');
process.kill(process.pid, 'SIGTERM');
jest.runAllTimers();
expect(setTimeout.mock.calls.length).toBe(2);
});
});
和測試失敗:
預期值是(使用===) :收到:和控制檯日誌輸出是:
console.log tmp/index.js:10
Timer 2 was run
console.log tmp/index.js:2
Got SIGTERM
如何獲得setTimeout
在這裏跑?
嘗試改變SIGTERM到SIGHUP了測試。 sigterm可能會殺死進程。還要嘗試刪除定時器1,並檢查控制檯日誌是否實際以同步方式工作。 – Jehy