0

名前付き関数を含むコントローラーがあります。

function controller($scope, ...){
   function foo(data){ 
     //logic for other stuff
     $log(data);
 }

 //some promise stuff
waiting.then(function(data){
  foo(data);
});

関数を利用できるようにするために、foo をスコープ変数に割り当てたくありませんでした。

$scope.foo = function(data) {}

眉をひそめられた?(よくわかりません...しかし、ビューからfooを呼び出していないので、なぜそうするのかわかりません)

私の問題は、単体テストの「it」ブロックから foo 関数を呼び出すにはどうすればよいですか?

すなわち

  it('expect calling function', function(){
    foo(data);
});

これは私にエラーを与えます

4

1 に答える 1

2

コントローラーの外側で関数を呼び出すfooことは不可能です。これfooは、クロージャーである内部関数が定義されており、コントローラー関数本体内でのみ使用できるためです。https://developer.mozilla.org/cs/docs/Web/JavaScript/Closures#Lexical_scopingを参照してください

angularコントローラーのcontrollerAs構文を好みます。Controller は、プロパティとメソッドが定義された通常のオブジェクト コンストラクターです。スコープへのバインドは、ng-controller ディレクティブ (またはルート表示) の評価中にのみ発生します。

一般に、テストでコントローラーインスタンスを作成し、依存関係をモックし(waiting)、スパイを使用してアサート関数呼び出しをより簡単に行うことができます。

http://toddmotto.com/digging-into-angulars-controller-as-syntax/

于 2015-07-14T20:45:43.020 に答える