javascript - 如何检查(断言)Ember Promise 是否已结算?

标签 javascript ember.js promise qunit

我有一个 Ember Promise 作为我正在测试的服务方法的结果返回。我正在使用 Ember 2.16 和 qunit。

let promise = service.myFunctionBeingTested();
promise.then((resolveParam) => {
    assert.equal(resolveParam, EXPECTED_VAL);
}).catch(() => {
    assert.notOk("Promise rejected");
}

// Code here is supposed to trigger resolution of promise...

// Code here to make sure the promise is resolved and assert is run

我可以使用什么(在 promise 应该得到解决之后)来确保 promise 得到解决并且assert.equal(resolveParam, EXPECTED_VAL); 运行了吗?

看起来应该很容易检查 Promise 是否已解决,但是 Ember 关于 rsvp Promise 的文档要么太难导航,要么不存在 😊 我可以使用 assert.expect(/* COUNT */) 但以后的用户每次添加新断言时都必须更新此数字,这是我想避免的。

最佳答案

在测试开始时,使用 assert.expect(1) 告诉测试您正好需要 1 个断言。那么你应该很好。如果 promise 失败,您的 notOk 将被调用并且测试将失败。如果 promise 兑现,测试就会通过。

如果这不是验收测试,您可能需要:

import wait from 'ember-test-helpers/wait'

然后从测试返回等待调用,以确保测试在检查是否获得正确数量的断言之前等待您的 promise :

 return wait()

更新

无需 assert.expect 即可执行此操作的另一种方法是在之前声明一个变量,例如:

let successCalled = false

然后在成功 block 中

promise.then((resolveParam) => {
    successCalled = true
})

然后,执行:

return wait().then(() => {
     assert.ok(successCalled)
})

尽管如此,assert.expect 就是为了这个目的而存在的,所以我建议使用它。

关于javascript - 如何检查(断言)Ember Promise 是否已结算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50652045/

相关文章:

javascript - 如何将数据库中的电话号码添加到 <a href ="tel:"> 标签

javascript - EmberJS 触发子组件对父组件的操作

angularjs - 等待所有的 promise 得到解决

javascript - jQuery 3.0 promise

javascript - 如何在 javascript 客户端上实现 IBM MQ Light

javascript - 使用 WKHTMLTOPDF 时背景图像未在 PDF 中显示

javascript - 如何将字符添加到 JSON 文件的末尾?

ember.js - EmberJS 路由器应用程序 : Views vs Controllers

ember.js - 从任何应用程序 Controller 访问全局变量

javascript - 带有子路由器的 Aurelia-Router 显示警告