如何防止具有自我实例化功能的角度控制器执行测试?
(我用一个人为的例子来说明我的问题)
我有一个控制器在启动时执行一些代码(在我的例子中是ajax)
var app = angular.module('app', []);
app.controller('myCtrl', function () {
this.doSomething = function () {
console.log('nahh');
};
this.doSomething();
});
我正在尝试为控制器编写测试。我不想要 doSomething 来执行。
var ctrl = $controller('myCtrl',
{
$scope: {}
});
// ctrl.doSomething has already run!
expect(something).to.be(true);
当使用backbone.js时,我会做类似的事情:
MyCtrl.prototype.doSomething = function(){};
myCtrl = new MyCtrl();
我在初始化之前修改原型以防止执行。 $ controller似乎给了我一个控制器的实例。能够获得原型是有用的。我可能还有其他方法可以解决这个问题!
答案 0 :(得分:1)
正如我在评论中提到的,我通过将我的初始化代码放在init
函数中解决了这个问题。然后,当它在dom上时,我使用ng-init
来启动此代码。这允许我在代码中测试控制器而不启动它。
JS:
$scope.init = function() {
doSomething();
};
HTML:
<div ng-controller="myController" ng-init="init()">