1

我的应用程序代码组件经常调用依赖组件,这些组件运行返回 Q.js 承诺的异步方法。我想尽可能编写此类外部组件的同步测试......主要是因为同步测试更具可读性,但也因为几乎不可能知道依赖组件何时“准备好”(如下所述)

我已经设计了依赖组件,因此我可以将它们配置为在测试时同步运行。但他们的 API 仍然返回 Q.js 承诺。即使这样的promise 将“立即”完全解决(例如,return Q(some_data);),Q 保证promise 直到下一个tick 才会真正解决。这(正确地)确保了异步行为,即使在解决时间实际上为零时也是如此。

我得到它。

但这意味着我无法为应用程序组件编写同步测试,也无法控制准备就绪的承诺何时解决。当依赖组件没有向调用者公开承诺时,我根本无法测试代码......当依赖组件API的方法应该是即发即弃时,它不应该这样做,这通常是这种情况.

如果我的测试可以告诉 Q 发生了“滴答”,从而导致它尝试解决排队的承诺,那就太好了。这个想法受到 Angular 的 $q 的启发,它$scope.$apply为了这个目的而加入了这个功能(你叫它)。

我今天看不到任何方法可以在 Q 中触发“滴答声”。当然,我不想打猴子setTimeout

有什么我不知道的方法吗?这会是一个很好的功能吗?

4

1 回答 1

0

这是一个有趣的想法。Q 今天没有提供任何强制刷新事件队列的方法。在大多数情况下不提供此功能可能有很好的安全和安全理由,我当然会鼓励为异步系统编写异步测试。我有兴趣从我们的积极贡献者小组那里听到关于这个想法的反馈,所以我已经向 Q 的下一代事件队列实现ASAP (linked)提交了一个问题。

于 2013-10-25T01:10:20.437 回答