我试图在 $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
已解决,业力会显示超时错误。
由于它可以使用简单的Promise.resolve('foo')
(见上文),问题似乎是$httpBackend.flush()
只刷新第一个承诺,而不是返回的第二个承诺。
随机$rootScope.$apply()
也没有解决问题。我也尝试过初始化beforeEach(module('myModule'))
,但由于未使用该模块,我还是看不到重点。我错过了什么?