我不确定此测试在哪里出错。
服务代码:
self.clearMessage = function(interval) {
if (!interval)
interval = 2000;
return $timeout(function() {
return '';
}, interval);
};
规格:
it('clears message', function() {
var result = self.clearMessage();
$timeout.flush();
expect(result).toBe('');
});
我也尝试在测试中触发摘要周期但没有成功。我以前从未遇到过这个问题,因为我通常会在超时块中设置一个外部变量 - 这对单元测试很有效。
在这种情况下,当超时内只有一个返回时,我收到以下错误:
Expected Promise({ $$state: Object({ status: 1, value: '' }), $$timeoutId: 1 }) to be ''.
编辑/答案
it('clears message', function() {
self.clearMessage().then(function(response) {
expect(response).toBe('');
})
$timeout.flush();
});

答案 0 :(得分:1)
从您的服务代码中调用AngularJS的$timeout
服务将为您返回一个承诺。当达到超时时,此承诺将......"得到解决。承诺将通过fn函数的返回值来解决。"
https://docs.angularjs.org/api/ng/service/$timeout
你的规范中需要这样的东西:
var result = self.clearMessage();
result.then(function(value) {
expect(value).toBe('');
});
$timeout.flush();