2015-05-07 5 views
0

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

Вот мой контроллер:

myControllers.controller 'MyCtrl', ($scope) -> 
    this.init =() -> doStuff() 
    this.init() 

Вот мой набор тестов:

describe "testing myCtrl",() -> 
    beforeEach "myControllers" 
    $controller = {} 
    $scope = {} 

    beforeEach inject (_$controller_,$rootScope) -> 
    $controller = _$controller_ 
    $scope = $rootScope.$new() 

    describe "MyCtrl",() -> 
    beforeEach() -> 
     MyCtrl=$controller('MyCtrl',{$scope:$scope}) 

    it "should be defined",() -> # passes 
     expect(MyCtrl).toBeDefined() 

    it "should define #init",() -> # passes 
     expect(angular.isFunction(MyCtrl.init)).toBe true 

    it "should call #init",() -> # fails 
     spyOn MyCtrl, 'init' 
     expect(MyCtrl.init).toHaveBeenCalled() 

Последние утверждения приводит к Error: Ожидаемое шпионской INIT быть вызванным.

ответ

0

Это потому, что он называется сразу, поэтому к тому времени, когда ваши тестовые хиты, он уже побежал. Ваш beforeEach, где вы создаете MyCtrl, это то, где он будет вызван автоматически. Вам придется структурировать вещи по-другому для тестирования.

+0

Как его структурировать? Должен ли я создать экземпляр контроллера в утверждении или создать шпион в beforeEach? –

0

Я считаю, что ответ на проблему заключается в том, что у меня нет функции init(). Для этого нет оснований. Код верхнего уровня в контроллере запускается после создания экземпляра, а его включение в функции init избыточно.

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