2015-03-27 3 views
3

Я пытаюсь написать тест для контроллера, который имеет $rootScope.$on('accountsSet', function (event).... Поэтому в тестах я использую .broadcast.andCallThrough(), который многие другие вопросы здесь, в SO, предлагают, пока он также работал раньше для меня.

Так что мой контроллер довольно прост:

angular.module ('controller.sidemenu', [])

.controller('SidemenuCtrl', function($rootScope, $scope, AccountsService) { 

    $rootScope.$on('accountsSet', function (event) { 
     $scope.accounts = AccountsService.getAccounts(); 
     $scope.pro = AccountsService.getPro(); 
    }); 

}); 

Любой тест прост, а также:

describe("Testing the SidemenuCtrl.", function() { 

    var scope, createController, accountsService; 

    beforeEach(function(){ 

     angular.mock.module('trevor'); 
     angular.mock.module('templates'); 

     inject(function ($injector, AccountsService) { 

      scope = $injector.get('$rootScope'); 
      controller = $injector.get('$controller'); 
      accountsService = AccountsService; 

      createController = function() { 
       return controller('SidemenuCtrl', { 
        '$scope' : $injector.get('$rootScope'), 
        'AccountsService' : accountsService, 
       }); 
      }; 
     }); 

    }); 

    it("Should load the SidemenuCtrl.", function() { 

     accountsService.setPro(true); 

     spyOn(scope, '$broadcast').andCallThrough(); 

     var controller = createController(); 

     scope.$broadcast("accountsSet", true); 
     expect(scope.pro).toBeTruthy(); 

    }); 

}); 

Ошибка, которую я получаю, если для spyOn(scope, '$broadcast').andCallThrough();. Обратите внимание, что область для этих тестов - rootScope, так что это не должно быть проблемой.

Таким образом, ошибка, которая относится к этой строке: TypeError: 'не определено' не является функцией на .../тесты/контроллеры (оценка 'spyOn (объем, '$ радиопередачу') andCallThrough().) /sidemenu.js:30

+1

Вы не используете жасмин 2.0 Авось? Синтаксис был изменен на and.callThrough() – doldt

+0

Да, это было так! Дело в том, что у меня есть 'karma-jasmine: 0.3.5', и я не установил' jasmine-core', как говорят документы. Это странно? – manosim

+0

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

ответ

3

Я превращаюсь мой комментарий в ответ, так как он оказался раствор:

в жасмин 2.0 синтаксис шпионами изменился (и многое другое, увидеть красивые docs here) новый синтаксис

spyOn(foo, 'getBar').and.callThrough(); 

Сравнить с синтаксисом жасмин 1.3:

spyOn(foo, 'getBar').andCallThrough(); 
Смежные вопросы