0
我剛開始接觸單元測試和角度1.2。我正在使用$ httpBackend服務來測試服務中的$ httpcall。這種服務被稱爲我的控制器內:
var app = angular.module('myApp', []);
app.controller('MainCtrl', function (someService) {
var vm = this;
vm.hasError = false;
//debugger;
someService.someAsyncCall()
.then(function (data) {
vm.hasError = false;
})
.catch(function (data) {
vm.hasError = true;
});
});
app.factory('someService', function ($http) {
return {
someAsyncCall: function() {
return $http.get("/data")
.success(function (data) {
//return true
})
.error(function() {
console.log('error');
//return false
});
}
};
});
我試圖寫當端點是錯誤的測試:
beforeEach(function() {
someServiceMock = jasmine.createSpyObj('someService', ['someAsyncCall']);
module('myApp');
inject(function ($rootScope, $controller, $q, _$timeout_,$httpBackend) {
$scope = $rootScope.$new();
someServiceMock.someAsyncCall.andReturn($q.when('weee'));
$timeout = _$timeout_;
controllerService = $controller;
httpMock = $httpBackend;
});
});
it("should set hasError=true with error request", function() {
httpMock.expectGET("/datajfds").respond(false);
ctrl = controllerService('MainCtrl', {someService: someServiceMock});
expect(ctrl.hasError).toBe(true);
});
這是錯誤:
MainCtrl測試應該設置hasError =錯誤請求時爲true。
Expected false to be true.
Error: Expected false to be true.
at new jasmine.ExpectationResult (http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js:114:32)
at .toBe (http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js:1235:29)
at .<anonymous> (http://run.plnkr.co/Q77IyPb6agUqgR2U/specs.js:37:31)
基本上我想覆蓋/寫一個測試,當someService.someAsyncCall()會捕獲一個錯誤。我怎樣才能編寫這個測試,以便ctrl.hasError = true?
plunkr:http://plnkr.co/edit/aX29h4k64ZUm6hDedZl6?p=preview
好功夫,只是一個問題所獲得的價值:最後符合規範的vm.hasError被設置雖然那麼()的一部分。它應該遍歷catch()部分。另請參閱:http://plnkr.co/edit/EoIgQuoeIwD5eP0JLXIn?p = preview –
只有當您嘗試點擊的服務返回錯誤時纔會運行catch。也就是說,由於錯誤,服務無法響應。我已經更新了第三個測試,以顯示如何使用$ httpBackend來獲取服務來拋出錯誤。 – ScottL