我的应用程序代码组件经常调用依赖组件,这些组件运行返回 Q.js 承诺的异步方法。我想尽可能编写此类外部组件的同步测试......主要是因为同步测试更具可读性,但也因为几乎不可能知道依赖组件何时“准备好”(如下所述)
我已经设计了依赖组件,因此我可以将它们配置为在测试时同步运行。但他们的 API 仍然返回 Q.js 承诺。即使这样的promise 将“立即”完全解决(例如,return Q(some_data);
),Q 保证promise 直到下一个tick 才会真正解决。这(正确地)确保了异步行为,即使在解决时间实际上为零时也是如此。
我得到它。
但这意味着我无法为应用程序组件编写同步测试,也无法控制准备就绪的承诺何时解决。当依赖组件没有向调用者公开承诺时,我根本无法测试代码......当依赖组件API的方法应该是即发即弃时,它不应该这样做,这通常是这种情况.
如果我的测试可以告诉 Q 发生了“滴答”,从而导致它尝试解决排队的承诺,那就太好了。这个想法受到 Angular 的 $q 的启发,它$scope.$apply
为了这个目的而加入了这个功能(你叫它)。
我今天看不到任何方法可以在 Q 中触发“滴答声”。当然,我不想打猴子setTimeout
!
有什么我不知道的方法吗?这会是一个很好的功能吗?