我试图在$ http调用后在Promise中返回Promise,但它在karma / jasmine测试用例中永远不会得到解决。
以下是代码:
$httpBackend.expectGET('/dummy').respond('foo');
var p = $http.get('/dummy').then(function(response) {return response.data;});
//var p = Promise.resolve('foo'); // if you use this, it works
p = p.then(function(x) {
expect(x).toEqual('foo');
return Promise.resolve(x+'bar'); // return follow-up promise
}).then(function(x) {
expect(x).toEqual('foobar');
console.log('Hooray!');
});
$httpBackend.flush();
当然,测试用例通过,但第二个Promise永远不会被解决。如果我使用waitsFor
检查p
是否已解决,则karma会显示超时错误。
因为它适用于简单的Promise.resolve('foo')
(见上文),问题似乎是$httpBackend.flush()
只刷新第一个保证,而不是返回第二个保证。
随机$rootScope.$apply()
也没有解决问题。我也尝试初始化beforeEach(module('myModule'))
,但由于该模块未被使用,我还是没有看到这一点。我错过了什么?