2015-11-11 4 views
5

Hier ist meine Controller:Fehler: Erwartet einen Spion, bekam aber Funktion

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(); 
    } 
    } 

Hier ist meine Unit-Test dafür:

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.  
    });  

}); 
} 

Der Test wirft Fehler, wenn es geht auf der Linie:

expect(controller.activate).toHaveBeenCalled(); 

sagen, dass Exp einen Spion, bekam aber Funktion. Aktivieren ist eine Funktion, die aufgerufen wird, wenn ich den Konstruktor meines Controllers, den ich gerade teste, aufruft. Kann mir bitte jemand in die richtige Richtung zeigen?

Versucht, die Zeile hinzufügen

spyOn(controller, 'activate'); 

vor erwarten, ich bin mit dem folgenden Fehler.

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

OK, so dass Sie jetzt einen offiziellen Testfehler sind immer. Wird die 'activate' Funktion während der Instantiierung Ihres Controllers aufgerufen? – sma

+0

ja es wird aufgerufen. – Aj1

Antwort

11

Sie müssen eine Funktion ausspionieren, bevor Sie testen, ob sie aufgerufen wurde oder nicht. Versuchen Sie folgendes:

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

versucht, den Spion hinzuzufügen es wirft diese neuen Fehler Erwartete Spion aktivieren, um aufgerufen worden zu sein. \t Fehler: Erwarteter Spion aktiviert wurde aufgerufen. – Aj1

+0

Können Sie die neuen Fehler in Ihrer Frage posten? – sma

+0

Sicher. Ich habe es aktualisiert. – Aj1

Verwandte Themen