angularjs - 如何在 Jasmine 2.0 中测试延迟的 Promise

标签 angularjs angular-promise

我有一个测试用例,我想延迟测试用例中的 promise ,并在时间超过 500 毫秒时拒绝。

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

知道如何实现这一点。

最佳答案

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

假设您有一个返回 Promise 的函数“doSomething”。并且您希望确保 Promise 在 500 毫秒内完成(否则测试应该失败)。 那么您的测试步骤可能如下所示(简短版本):

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);
});

关于angularjs - 如何在 Jasmine 2.0 中测试延迟的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39759584/

相关文章:

javascript - 将已解决的 promise 注入(inject)服务

javascript - 如何使用 AngularJS 和 CreateJS 预加载图像

ios - 下拉菜单中的Timepicker在iPad和触摸设备上不起作用

Angularjs - 在 Protractor e2e 测试中模拟触摸事件

javascript - 创建一个没有返回值的 AngularJS promise

javascript - 拒绝 Angular $resource 的 $update 函数中的延迟

angularjs - Angular $q 返回已解决的 promise

javascript - 似乎无法让 ng-model 在这种情况下工作

javascript - 使用 Angular ngMessage 进行带有错误消息的表单验证

angularjs 单元测试基于 promise 的服务(SQlite 数据库服务)