【问题标题】:How can I test that a Promise is never fulfilled?如何测试 Promise 永远不会实现?
【发布时间】:2016-03-22 16:37:55
【问题描述】:

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

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 伪造的。

【问题讨论】:

    标签: javascript testing promise mocha.js chai-as-promised


    【解决方案1】:

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

    【讨论】:

    • 你能详细说明一下吗?我得到了图书馆背后的想法,但我不确定如何应用它。在我的情况下,承诺由被测对象返回。如果我模拟被测对象返回的内容,那么我就无法真正测试它。
    • 他是如何创建 Promise 的?你可以模拟 Promise 工厂,如果你使用 Q 来推迟一个承诺,你可以模拟它
    • 知道了 - 这比我的方法要好得多,谢谢。
    猜你喜欢
    • 2015-06-30
    • 2021-08-08
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多