私はprocess.on('SIGTERM')
コールバックでJestを使ってユニットテストをしようとしていますが、決して呼び出されないようです。私はjest.useFakeTimers()
を使用していますが、setTimeout
のコールをモックしているように見えますが、チェックするとsetTimeout.mock
オブジェクトには終わりません。NodeJS - JestユニットテストsetTimeout in 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
がここで実行することができますか?
テストのためにSIGHUPするSIGTERMを変更してみてください。 sigtermがプロセスを終了させる可能性があります。また、タイマー1を削除し、コンソールログが実際に同期方式で動作しているかどうかを確認してください。 – Jehy