我如何测试 Promise 从未实现?

How can I test that a Promise is never fulfilled?

我正在测试我编写的用于限制函数执行的库。

API 是 throttler.do(fn) 并且它 return 是 fn 的 return 值的承诺(在节流器决定可以 运行它)。

我正在使用 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伪造的

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