我已经看到了该问题的一组重复项,但无法解决该问题。
我有一个控制器,在控制器初始化期间,首先调用 fetchtemplate(),然后调用我的模拟 fetchtemplate()。
如何在控制器初始化期间停止调用实际(控制器)fetchtemplate()?我的意图是在我的规范中模拟函数 fetchtemplate()。请看看我的规范 -
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);
});
});
});
我曾尝试将 spyOn 放在this.init()
给出错误的 spyOn 之前,因为当时fetchtemplate()
不存在 spyOn。
我的控制器代码结构看起来像 -
angular.module('...', [...])
.controller('ChangeControlCreateController', ["$scope"...,
function ChangeControlCreateController($scope,...) {
$scope.fetchtemplate = function() {
console.log("controller's function");
...
};
$scope.fetchtemplate();
});
我得到的结果是 - 首先是控制台项“控制器的功能”,然后是使用模拟功能执行规范。我希望模拟函数在没有控制器函数执行的情况下执行