1

$http 呼び出しの後に Promise で Promise を返そうとしていますが、カルマ/ジャスミン テスト ケースでは解決されません。

コードは次のとおりです。

$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();

もちろん、テスト ケースはパスしますが、2 番目の Promise は解決されません。waitsForそれが解決されたことを確認するために使用するとp、カルマはタイムアウトエラーを示します。

単純なものPromise.resolve('foo')(上記参照) で動作するため、問題$httpBackend.flush()は最初のプロミスのみをフラッシュし、返された 2 番目のプロミスはフラッシュしないようです。

ランダム$rootScope.$apply()でも問題は解決しませんでした。初期化も試みbeforeEach(module('myModule'))ましたが、モジュールが使用されていないため、とにかくポイントがわかりません。私は何が欠けていますか?

4

0 に答える 0