1

我试图在 $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')),但由于未使用该模块,我还是看不到重点。我错过了什么?

4

0 回答 0