如何检查(断言)Ember承诺是否已解决?

时间:2018-06-01 23:17:56

标签: javascript ember.js promise qunit

我正在测试的服务方法返回了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);但是未来的用户将会有每次添加我想避免的新断言时更新此号码。

1 个答案:

答案 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存在,但我建议使用它。