在验收测试中,我如何知道我的异步事件何时发生?

Posted

技术标签:

【中文标题】在验收测试中,我如何知道我的异步事件何时发生?【英文标题】:In an acceptance test, how do I know when my asynchronous events are? 【发布时间】:2012-05-25 17:01:26 【问题描述】:

这就是问题所在 - 我有一个系统,当事件发生时,它会触发一系列不同的异步代码(某些代码甚至会触发更多事件)。

现在在验收测试期间,我触发了相同的事件 - 但是应该使用什么策略来通知测试运行者所有后续事件都已完成并准备好进入下一步?

我开始只是等待固定的时间 - 但我一直只是一个软糖。 现在,我正在关注尾部事件,并在它们全部完成后继续前进。但我可以看到随着系统的发展,这变得越来越复杂。

只是想知道是否有我错过的替代策略。有什么建议吗?

FWIW 我正在使用cucumber.js 和zombie 在node.js 上测试express 应用程序。

干杯并感谢您的宝贵时间,

戈登

【问题讨论】:

【参考方案1】:

显然,解决方案会因应用程序而异,但我发现以这样一种方式构建我的应用程序很有帮助,即顶层异步函数的回调一直被跟踪到最后。完成所有***回调后,您可以触发一些事件或调用一些回调以指示一切都结束了。使用 async's 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
);

【讨论】:

parallel 看起来非常有用 - 我会试一试。我将开始通过事件链传递回调,看看效果如何。谢谢!

以上是关于在验收测试中,我如何知道我的异步事件何时发生?的主要内容,如果未能解决你的问题,请参考以下文章

Ember 验收测试没有看到更新的 DOM

在干净的架构中,如何进行验收测试?

如何在 Javascript 应用程序中进行冒烟测试和验收测试?

单元测试?集成测试?回归测试?验收测试?

验收测试重定向到特定的 URL

用于节点 JS 验收测试的开发 API