Angular测试文档显示test sample,其中在测试断言之前调用$ apply。我试着这样做,但我的测试不能正常工作。应该破解的第一个代码,有效...似乎我的断言没有运行。第二个代码,我的测试有效,但它与文档不同(我更喜欢这种风格)。
首先:
it('tests angular promises', function() {
getABC = function() {
return $q((resolve, reject) => {
resolve('abc');
});
};
var state = getABC()
$rootScope.$apply()
// assertions come after $apply call as in documentation: doesn't work.
state.should.eventually.be.equal('abcc')
})
------
✓ tests angular promises
1 passing (78ms)
第二
it('tests angular promises', function() {
getABC = function() {
return $q((resolve, reject) => {
resolve('abc');
});
};
var state = getABC()
state.should.eventually.be.equal('abcc')
// assertions come before $apply call: works
$rootScope.$apply()
})
------
1 failing
1) tests angular promises:
AssertionError: expected 'abc' to equal 'abcc'
+ expected - actual
-abc
+abcc
答案 0 :(得分:1)
显示的example是另一种情况。
使用
expect(resolvedValue).toEqual(123);
断言不涉及承诺。
另一方面,
state.should.eventually.be.equal('abcc')
使用chai-as-promised
进行断言。它将state
与then
链接在一起以获取值并断言它。并且$q
承诺链仅在摘要上执行。这就是$rootScope.$digest()
断言后eventually
是必要的原因。
有关如何使用chai-as-promised
测试Angular的详细信息,另请参阅this answer。