0

これが摩擦です-イベントが発生すると、異種の非同期コードのチェーンを起動するシステムがあります(一部のコードはさらに多くのイベントを起動します)。

受け入れテスト中に同じイベントを発生させますが、後続のすべてのイベントが終了し、次のステップに進む準備ができていることをテストランナーに通知するには、どの戦略を使用する必要がありますか?

私は一定の時間待つだけで始めましたが、それはいつもただのファッジでした。そして今、私はテールイベントに夢中になって、それらがすべて終わったときに先に進みます。しかし、システムが成長するにつれて、これが複雑になるのを見ることができます。

私が見逃した代替戦略があるかどうか疑問に思っています。助言がありますか?

FWIW cucumber.jsゾンビを使用して、 node.jsでエクスプレスアプリをテストしています。

乾杯とお時間をいただきありがとうございます、

ゴードン

4

1 に答える 1

1

明らかに、ソリューションはアプリケーションによって異なりますが、最上位の非同期関数のコールバックが最後まで追跡されるようにアプリケーションをアーキテクチャ化すると便利です。すべてのトップレベルのコールバックが完了したら、イベントを発生させるか、すべてが終了したことを示すコールバックを呼び出すことができます。asyncのparallelようなものを使用すると、次のようなことができる可能性があります。

eventEmitter.on('someEvent', function(some, data, callback) {
  async.parallel([
    function(cb) { firstAsyncThing(some, cb); },
    function(cb) { secondAsyncThing(data, cb); }
  ], function(err, results) {
    // called when all functions passed in the array have their `cb` called
    callback(err, results);
  });
});

したがって、イベントにコールバックを渡すことができます。

eventEmitter.emit('someEvent', 'some', 'data', function(error, results) {
  // the event has been fully handled
});
于 2012-05-25T17:40:36.263 に答える