2016-07-06 4 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

Были много проблем с тем, что вы делали, и я не понимаю, что вы пытаетесь сделать с третьего испытания. Апи, который вы набрали, настроен в службе.

$http.get("/data") 

Смотрите это plunker, которые могли бы быть то, что тесты, которые вы пытались сделать. Некоторые проблемы:

Вы были инъекционные много вещей, которые не нужны были

Ваш вызов службы не возвращается ничего.

Вы не получали значения от сервисного вызова

+0

Хорошее усилие, только один вопрос: за последние спецификации vm.hasError получает значение, хотя в то время() часть. Он должен пересекать часть catch(). См. Также: http: //plnkr.co/edit/EoIgQuoeIwD5eP0JLXIn? P = preview –

+0

Уловка выполняется только в том случае, если служба, которую вы пытаетесь ударить, вернула ошибку. То есть, служба не может ответить из-за ошибки. Я обновил третий тест, чтобы показать, как вы можете использовать $ httpBackend, чтобы заставить службу выбросить ошибку. – ScottL