2

次のように、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% のコード カバレッジを維持すると問題が発生する可能性があります。これについてもっと良い方法は何でしょうか?

4

1 に答える 1