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 回答