我有一个 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/