2016-07-06 1 views
0

단위 테스트 및 각도 1.2에 머리를 쓰기 시작했습니다. 서비스에서 $ httpcall을 테스트하기 위해 $ httpBackend 서비스를 사용하고 있습니다. 내가 엔드 포인트가 잘못된 경우에 대한 테스트를 작성하는 것을 시도하고있다

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 
       }); 
     } 
    }; 
}); 

:이 서비스는 내 컨트롤러 내에서 호출되는

MainCtrl 테스트를 hasError을 설정해야합니다

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); 
    }); 

이 오류입니다 오류 요청시 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() 부분을 트래버스 (traverse)하기로되어있다. 참고 : http : //plnkr.co/edit/EoIgQuoeIwD5eP0JLXIn? p = preview –

+0

적중하려는 서비스가 오류를 반환하는 경우에만 캐치가 실행됩니다. 즉, 서비스가 오류로 인해 응답 할 수 없습니다. 세 번째 테스트를 업데이트하여 $ httpBackend를 사용하여 서비스가 오류를 발생시킬 수있는 방법을 보여주었습니다. – ScottL