如何在Jasmine 2.0中延迟测试一个承诺

时间:2016-09-29 00:31:37

标签: angularjs angular-promise

我有一个测试用例,我希望延迟测试用例中的承诺,如果时间超过500毫秒则拒绝。

实际服务中没有使用$ timeout。

Anyidea如何实现这一目标。

2 个答案:

答案 0 :(得分:1)

Jasmine 2.0通过done()函数支持异步操作。在回调函数中使用done作为第一个参数()。另请参阅Jasmine docs。 然后,如果异步操作成功完成,则可以调用done(),或者在失败时调用done.fail()。

假设你有一个返回Promise的函数'doSomething'。并且您希望确保Promise在500ms内完成(否则测试应该失败)。 然后你的测试步骤看起来像这样(简短版本):

it("should return within 500ms", function(done) {
    doSomething().then(done, done.fail);
    setTimeout(function() { done.fail("doSomething took too long"); }, 500);
});

如果您还想检查Promise履行时传递的结果,那么它可能如下所示:

it("should return within 500ms", function(done) {
    doSomething().then(function(result) {
        // check result here
        done();
    }, done.fail);

    setTimeout(function() { done.fail("doSomething took too long"); }, 500);
});

答案 1 :(得分:0)

您可以尝试使用setTimeOut函数。 setTimeOut(你的承诺解析函数,500)