1

私はAngularjs + grunt + karma + jasmineを使っています。これは私が私のコントローラに関数を書いた方法です:カルマとジャスミンでanglejsの引数としてフォームを使ったテスト関数

Vm.find = function(form){ 
/* code lines */ 
}; 

そしてビュー側でng-clickで関数を呼び出しました。

<form name="form"> 
<input/> 
<input/> 
<input/> 
<button ng-click(Vm.find(form))></button> 
</form> 

ここで、単体テストの引数としてフォームを使用して関数を呼び出す方法に驚いています。私はテスト仕様ファイルの下のコードを使用してテンプレートhtmlを取得しています。しかし、どのように機能を引き起こすのか分からない。

html = templateCacheMock.get('modules/reports/partials/renewals/generate-renewals.htm'); 
    complied = angular.element(html); 
    element = compileMock(complied)(scope); 
    element.find('.find-btn').triggerHandler('click'); 

ご了承ください。私はユニットテストのために全く新しいです。

答えて

1

ng-clickを使用しているので、呼び出された関数は$scopeオブジェクトの一部でなければなりません。したがって、宣言は次のようにする必要があります。

$scope.Vm.find = function (...) {...}; 
+0

フォーム引数はどうですか? – winnyboy5

+1

'ng-mode'を使って、各入力を' $ scope'要素に束縛することができます。これが完了すると、AngularはJavaScript変数とHTML要素の間に双方向のバインドを確立します。たとえば、入力フィールドの1つに 'ng-model =" first_name "'を追加するとします。 JavaScriptの中には '$ scope.first_name'という名前の変数があり、入力フィールドに入力されたものを含みます。同様に、JavaScript内の変数の値を変更すると、その変更は自動的にHTMLページに反映されます。 – FDavidov

関連する問題