0

我正在测试我编写的一个库来限制函数的执行。

API 是throttler.do(fn),它返回 fn 的返回值的承诺(在限制器决定可以运行它的任何时候解决)。

我正在使用lolex来伪造Date()setTimeout所以如果我将节流阀设置为每分钟允许两个动作并执行

throttler.do(() => {});
throttler.do(() => {});
throttler.do(() => {}).should.eventually.equal(5);

这如预期的那样失败(它超时,因为它一直在等待最后一个承诺,因为我从来没有打电话lolex.tick)。

有没有办法可以把它变成通过测试,比如

throttler.do(() => {}).should.never.be.fulfilled;

我做不到

setTimeout(() => done(), 1500)

因为 setTimeout 方法是 lolex 伪造的。

4

1 回答 1

0

您可以将 Promise 模拟为同步,然后检查 Promise 状态。这是一个可以使用promise-sync的库

于 2016-03-24T11:24:16.523 回答