$httpBackend を使用して角度サービスをテストすると、予期しない結果が得られます。
httpBackend.expectGET を使用してテストを実行すると、テストは期待どおりに機能します。ただし、 whenGET を使用してまったく同じテストを実行すると、テストは失敗し、「フラッシュする保留中の要求はありません」というメッセージが表示されます。
テスト中のサービスは次のとおりです。
.factory('CoverageService', ['$http', function ($http) {
return{
GetCoverageReport: function () {
return $http.get('../../../js-test-reports/coverage/Chrome 43.0.2357%20(Windows%207)/cobertura-coverage.xml');
},
テストは次のとおりです。
'use strict';
describe('coverage-manager.js', function () {
describe('CoverageService', function () {
var httpBackend, sut, rootScope;
beforeEach(module('fot'));
describe('GetCoverageReport', function () {
beforeEach(inject(function ($httpBackend, CoverageService, $rootScope) {
httpBackend = $httpBackend;
sut = CoverageService;
rootScope = $rootScope;
}));
it('should return data', function () {
var expectedData = { testData: 'some data' };
var actualData;
httpBackend.expectGET('../../../js-test-reports/coverage/Chrome 43.0.2357%20(Windows%207)/cobertura-coverage.xml').respond(expectedData);
sut.GetCoverageReport()
.success(function (response) { actualData = response; });
httpBackend.flush();
expect(actualData).toEqual(expectedData);
});
it('should return data but says No pending request to flush', function () {
var expectedData = { testData: 'some data' };
var actualData;
httpBackend.whenGET('../../../js-test-reports/coverage/Chrome 43.0.2357%20(Windows%207)/cobertura-coverage.xml').respond(expectedData);
sut.GetCoverageReport()
.success(function (response) { actualData = response; });
rootScope.$digest();
httpBackend.flush();
expect(actualData).toEqual(expectedData);
});
it('should return data', function () {
var expectedData = { testData: 'some data' };
var actualData;
httpBackend.whenGET('../../../js-test-reports/coverage/Chrome 43.0.2357%20(Windows%207)/cobertura-coverage.xml').respond(expectedData);
sut.GetCoverageReport()
.success(function (response) { actualData = response; });
httpBackend.flush();
expect(actualData).toEqual(expectedData);
});
});
});
});
「フラッシュする保留中の要求はありません」というメッセージでGETが失敗した場合の両方で、expectGETが渡されます。いくつかの投稿で見たように、 $rootScope.$digest() を使用してみましたが、うまくいきませんでした。テストは、expectGETとexpectWHENを除いて同じなので、何が起こっているのかわからない?
そして、ここにエラーの詳細があります:
Error: No pending request to flush !
at Function.$httpBackend.flush (file:///C:/dev/fot/git/client/src/main/js/bower_components/angular-mocks/angular-mocks.js:1455:34)
at Object.<anonymous> (file:///C:/dev/fot/git/client/src/test/javascript/spec/controllers/devTools/CoverageManager.spec.js:78:21)
at attemptSync (file:///C:/dev/fot/git/client/src/main/js/node_modules/karma-jasmine/lib/jasmine.js:1510:12)
at QueueRunner.run (file:///C:/dev/fot/git/client/src/main/js/node_modules/karma-jasmine/lib/jasmine.js:1498:9)
at QueueRunner.execute (file:///C:/dev/fot/git/client/src/main/js/node_modules/karma-jasmine/lib/jasmine.js:1485:10)
at Spec.queueRunnerFactory (file:///C:/dev/fot/git/client/src/main/js/node_modules/karma-jasmine/lib/jasmine.js:518:35)
at Spec.execute (file:///C:/dev/fot/git/client/src/main/js/node_modules/karma-jasmine/lib/jasmine.js:306:10)
at Object.<anonymous> (file:///C:/dev/fot/git/client/src/main/js/node_modules/karma-jasmine/lib/jasmine.js:1708:37)
at attemptAsync (file:///C:/dev/fot/git/client/src/main/js/node_modules/karma-jasmine/lib/jasmine.js:1520:12)
at QueueRunner.run (file:///C:/dev/fot/git/client/src/main/js/node_modules/karma-jasmine/lib/jasmine.js:1496:16)
- アンギュラー1.2.28
- angular-mocks 1.2.28
- ジャスミン 2.0.0