2016-04-01 2 views
0

В настоящее время я тестирую контроллер в мокко. Контроллер имеет функцию активирования, которая должна срабатывать при успешном/неудачном запуске на основе ответа. Я не могу запустить функцию отказа или успеха во время моих тестов.Угловой мокко тест не увенчался успехом/ошибкой

viewController.js:

(function() { 
'use strict'; 
angular 
.module('app') 
.controller('viewCtrl', viewCtrl); 
function viewCtrl(Service) { 
    vm.Service = Service; 

    activate(); 
    function activate() { 
     vm.Service.get().then(success, failure); 
     function success(data) { 
      if (!data || data == 401) { 
       failure(data); 
      } 
     } 
     function failure(error) { 
      if (error) { 
       console.error("Loading question failed:", error); 
       vm.Service.set(); 
      } 
     } 
    } 
} 
})(); 

viewControllerTest.js:

describe('question_view_controller', function() { 
    var httpBackend, controller; 
    var expect = chai.expect; 
    var assert = chai.assert; 
    var Service = {}; 
    var createController; 

    beforeEach(function(){ 
     angular.mock.module('ui.router'); 
     angular.mock.module('question'); 

     Service = { 
      set : sinon.stub(), 

      get : sinon.stub().returns(Promise.reject({error:{}})); 
     } 
    }) 

    beforeEach(inject(function($httpBackend,$controller,$q){ 
     httpBackend = $httpBackend; 
     createController = function(){ 
      return $controller('ViewCtrl', { 
       $scope: scope, 
       Service: Service 
      });; 
     } 
})); 

afterEach(function(){ 
    httpBackend.verifyNoOutstandingExpectation(); 
    httpBackend.verifyNoOutstandingRequest(); 
}); 

describe('activate', function() { 
    describe('get.then() error', function(){ 
     beforeEach(function(){ 
      Service.get.returns(Promise.reject({error:{}})) 
     }) 
     it('should do nothing and setFailedQuestion should be called once', function(){ 
      vm = createController(); 
      scope.$digest(); 
      expect(vm.Service.set.callCount).to.equal('1'); 
     }) 

    }) 

}); 

}); 

Если кто-то может указать на мою ошибку или предоставить какие-либо понять, что было бы здорово. Другие вопросы, пожалуйста, спросите.

ОБНОВЛЕНИЕ: Отредактированный код для отражения ответа danday74. Все еще не работает.

ОБНОВЛЕНИЕ: Отредактированный код для отображения комментария danday74. Все еще не работает.

+0

Должен ли 'var QuestionService = {};' быть 'var Service = {};' в вашем viewControllerTest.js? В противном случае «Сервис», который вы объявляете в beforeEach, может быть не такой же «Службой», к которой вы обращаетесь в другом месте ... –

+0

Да, это должно быть. Укрепится. – BobDoleForPresident

+0

Помогло ли это? –

ответ

0

вам нужно будет вызвать дайджест диапазона. вам нужно будет вводить $ rootScope, а затем ...

vm = createController(); 
$rootScope.$digest(); 
expect(vm.Service.set.callCount).to.equal('1'); 

$ дайджеста() приводит к тому, то блоки должны быть выполнены.

Аналогичный подход к $ httpBackend.flush(), если вы когда-либо использовали это.

+0

Спасибо за ввод. Обновленный код, но «ожидать (vm.service.get.callCount) .to.equal ('1')" по-прежнему равен false. – BobDoleForPresident

+0

Service.get.returns (Promise.reject ({error: {}})) - это должно быть внутри вашей функции контроллера создания до того, как служба передается в контроллер. – danday74

+0

Еще раз спасибо за ввод. Обновленный мой вопрос, чтобы отразить ваш комментарий, однако «ожидать (vm.service.get.callCount) .to.equal ('1')" по-прежнему равен false. – BobDoleForPresident

Смежные вопросы