$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'))
ましたが、モジュールが使用されていないため、とにかくポイントがわかりません。私は何が欠けていますか?