1

如何防止具有自实例化功能的角度控制器执行测试?

(我用一个人为的例子来说明我的问题)

我有一个控制器在启动时执行一些代码(在我的例子中是 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 似乎给了我一个控制器的实例。能够获得原型会很有用。可能还有其他方法可以克服这个我不知道的!

4

1 回答 1

1

正如我在评论中提到的,我通过将我的初始化代码放在一个init函数中来解决这个问题。然后,我习惯于ng-init在 dom 上启动此代码。这使我可以在代码中测试控制器而无需它自己启动。

JS:

$scope.init = function() {
  doSomething();
};

HTML:

<div ng-controller="myController" ng-init="init()">
于 2014-06-04T23:44:48.000 回答