我正在测试的服务方法返回了Ember Promise。我使用的是Ember 2.16和qunit。
function [x] = solvet(u,d,l,b)
n=length(d);
x = (1:n);
y =(1:n);
% Solve tridiag LUx=b
% Step 1 Solve Ly=b for y
y(1) = b(1)
for i=2:n
y(i) = b(i) - l(i-1)*y(i-1);
end
%Step 2 : Solve Ux=y for x
x(n) = y(n)/d(n);
for i=(n-1):-1:1
x(i) = (y(i)-u(i)*x(i+1))/d(i);
end
end
我可以使用什么(在承诺应该解决之后)以确保承诺 已解决且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
已运行?
似乎应该很容易检查承诺是否已经解决,但Ember关于rsvp承诺的文档要么难以导航或缺席我可以使用assert.equal(resolveParam, EXPECTED_VAL);
但是未来的用户将会有每次添加我想避免的新断言时更新此号码。
答案 0 :(得分:3)
在测试开始时,使用assert.expect(1)
告诉测试您正好期待1个断言。那你应该好。如果承诺失败,您的notOk
将被调用,测试将失败。如果承诺解决,测试将通过。
如果这不是验收测试,您可能需要:
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
存在,但我建议使用它。