在karma

时间:2015-09-02 10:08:51

标签: javascript angularjs http promise httpbackend

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

0 个答案:

没有答案