2015-11-11 2 views
5

Вот мой контроллер:Ошибка: Ожидается шпион, но получила функцию

export class testController { 
    static $inject: string[] = ["testService", "$mdDialog", "$state"]; 
    constructor(public _testService: services.testService, private _mdDialog: any, private _$state: any) { 
     this.isCurrentlyEditing = false; 
     this.activate(); 
    } 
    } 

Вот мой блока тест для этого:

import {test as service} from './test.service'; 
    import {test as ctrl} from './test.controller'; 

    export function main() { 
    describe("testController",() => { 

    var mdDialog: angular.material.IDialogService; 
    var state: ng.ui.IStateService; 
    var testService: any; 
    var controller: any; 

    beforeEach(function() { 
     angular.mock.module('comp.modules.addField');   
    }); 
    beforeEach(function() { 
     testService = { 
      showCLULayer:() => { } 
     }; 
    }); 

    beforeEach(module('comp')); 
    beforeEach(inject(($injector: any) => { 

     mdDialog = $injector.get('$mdDialog'); 
     state = $injector.get('$state'); 
     testService = $injector.get('testService'); 
     controller = new ctrl.testController(testService, mdDialog, state); 
    })); 

    it("should Create Controller",() => {   
     controller = new ctrl.testController(testService, mdDialog, state); 
     spyOn(testService, 'showCLULayer').and.callThrough(); 
     expect(controller).not.toBeNull(); 
     expect(controller.activate).toHaveBeenCalled(); 
     ////error Expected a spy, but got Function.  
    });  

}); 
} 

Тест бросает ошибку, когда он идет к линии:

expect(controller.activate).toHaveBeenCalled(); 

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

Пробовал добавить строку

spyOn(controller, 'activate'); 

, прежде чем ожидать, я получаю следующее сообщение об ошибке.

Expected spy activate to have been called. 
    Error: Expected spy activate to have been called. 
+0

ОК, так что вы получаете официальную потерю теста. Вызывается функция 'activate' во время создания вашего контроллера? – sma

+0

да, это называется. – Aj1

ответ

11

Вам нужно следить за функцией перед тем, как проверить, вызвана ли она. Попробуйте следующее:

it("should Create Controller",() => {   
     controller = new ctrl.testController(testService, mdDialog, state); 
     spyOn(testService, 'showCLULayer').and.callThrough(); 
     expect(controller).not.toBeNull(); 

     spyOn(controller, 'activate'); // < ------------Spy on the function 
     expect(controller.activate).toHaveBeenCalled(); 
     ////error Expected a spy, but got Function.  
    });  
+1

попытался добавить spyon, он выбрасывает эти новые ошибки. Ожидаемый шпион активируется, чтобы быть вызванным. \t Ошибка: ожидаемый шпион активируется для вызова. – Aj1

+0

Можете ли вы опубликовать новые ошибки в своем вопросе? – sma

+0

Конечно. Я обновил его. – Aj1

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