Ich habe eine Reihe von Duplikaten für diese Frage gesehen, konnte aber das Problem nicht lösen.Jasmine Js - SpyOn Fakecall während der Controller-Initialisierung
Ich habe einen Controller und während der Controller-Initialisierung wird fetchtemplate() zuerst aufgerufen und dann wird mein Schein fetchtemplate() aufgerufen.
Wie kann ich verhindern, dass der tatsächliche (Controller) fetchtemplate() während der Initialisierung des Controllers aufgerufen wird? Meine Absicht ist es, die Funktion fetchtemplate() in meinem spec.Please zu spotten haben einen Blick auf meine spec -
describe("...",function(){
beforeEach(inject(function($controller,...) {
scope = $rootScope.$new();
this.init = function() {
$controller('ChangeControlCreateController', {
$scope: scope
});
}
}));
describe('Function', function() {
it("-- check for trueness",function(){
this.init() ; //Initialization of the controller
spyOn(scope,'fetchtemplate').and.callFake(function() {
return 101;
});
var fakeResponse = scope.fetchtemplate();
expect(scope.fetchtemplate).toHaveBeenCalled();
expect(fakeResponse).toEqual(101);
});
});
});
ich versucht habe, die spyOn vor dem this.init()
platzieren, die Fehler als fetchtemplate()
gab nicht an, dass existieren Zeit zu spionOn.
Mein Controller Codestruktur sieht aus wie -
angular.module('...', [...])
.controller('ChangeControlCreateController', ["$scope"...,
function ChangeControlCreateController($scope,...) {
$scope.fetchtemplate = function() {
console.log("controller's function");
...
};
$scope.fetchtemplate();
});
Das Ergebnis, was ich bekommen ist - Zuerst die Konsole Punkt „Funktion des Controllers“ und dann die Spezifikation mit Mock-Funktion ausgeführt wird. Ich möchte die Scheinfunktion ausführen ohne die Controller-Funktion ausführen
können Sie uns den Controller-Code geben? Ich muss sehen, wie Sie diese fetchtemplate-Methode – sam
sicher nennen, ich habe auch die Controller-Code-Struktur hinzugefügt. @sam – M3ghana