我有一个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);
正在运行?
这似乎很容易检查承诺是否已经确定,但是Ember关于回复承诺的文档要么太难导航,要么没有,我可以使用assert.expect(/* COUNT */)
,但是以后的用户将不得不在每次添加新断言时更新这个数字,这是我想要避免的。
发布于 2018-06-02 07:36:58
在测试开始时,使用assert.expect(1)
告诉测试您期望的恰好是1个assert。那你应该是个好人。如果promise失败,将调用您的notOk
,测试将失败。如果promise解决了,测试就会通过。
如果这不是验收测试,您可能需要:
import wait from 'ember-test-helpers/wait'
然后返回测试中的等待调用,以确保测试在检查是否获得正确的断言数量之前等待您的承诺:
return wait()
更新
没有assert.expect
的另一种方法是在之前声明一个变量,如下所示:
let successCalled = false
然后在成功块中
promise.then((resolveParam) => {
successCalled = true
})
然后,执行以下操作:
return wait().then(() => {
assert.ok(successCalled)
})
尽管assert.expect
是为此目的而存在的,因此我建议您使用它。
https://stackoverflow.com/questions/50652045
复制相似问题