次のように、hapi プラグイン内で setInterval を使用しているとします。
// index.js
internals = {
storage: {},
problemFunc: () => {
setInterval((storage) => {
storage.forEach((problem) => {
problem.foo = 'bar';
});
}, 500);
}
};
module.exports.register = (server, options, next) => {
server.on('start', () => { // called when the server starts
internals.storage.problem1 = {};
internals.storage.problem2 = {};
internals.storage.problem3 = {};
internals.problemFunc(internals.storage);
});
}
このサーバーのテストでは、サーバーのさまざまな側面をテストするために、サーバーを何度も起動および停止する場合があります。のようなエラーが発生することがありますcannot set property 'foo' of undefined
。これは、非同期コードが実行される直前にサーバーがシャットダウンされ、サーバーの停止と同時に internals.storage.problem が削除されるためです。
これは完全に理にかなっており、私はそれに問題はありません。テストが 90% の確率ではなく 100% の確率で機能することを確認するための良い方法を知りたいです。
できること:
problemFunc: () => {
setInterval((storage) => {
storage.forEach((problem) => {
if (problem !== undefined) { // check if deleted
problem.foo = 'bar';
}
});
}, 500);
}
また:
problemFunc: () => {
setInterval((storage = {}) => { // default assignment
storage.forEach((problem) => {
problem.foo = 'bar';
});
}, 500);
}
しかし、テストに合格するためだけにコードに条件を追加したくはありません。また、条件が実行される場合と実行されない場合があるため、100% のコード カバレッジを維持すると問題が発生する可能性があります。これについてもっと良い方法は何でしょうか?