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 に答える