2016-07-06 37 views
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

回答

0

有很多與你在做什麼的問題,我不明白你正在嘗試與第三次測試做。您點擊的API在服務中配置。

$http.get("/data") 

參見本plunker這可能是你試圖做測試。一些問題:

你被注入了很多的沒有必要

您的服務呼叫不返回任何東西。

你不是從服務呼叫

+0

好功夫,只是一個問題所獲得的價值:最後符合規範的vm.hasError被設置雖然那麼()的一部分。它應該遍歷catch()部分。另請參閱:http://plnkr.co/edit/EoIgQuoeIwD5eP0JLXIn?p = preview –

+0

只有當您嘗試點擊的服務返回錯誤時纔會運行catch。也就是說,由於錯誤,服務無法響應。我已經更新了第三個測試,以顯示如何使用$ httpBackend來獲取服務來拋出錯誤。 – ScottL