2016-03-25 9 views
0

私は模擬してテストしたい指示があります。このディレクティブはngModelを二重バインディングに設定してtrueにしますng-modelを含む分離スコープの模擬テスト指示文

scope: {'ngModel': '=' } 

transclude: true 

私がテストしようとしている仕様はかなり簡単です。私はbeforeEachを作成し、ngModelをテストするためのディレクティブを作成し、私のユニットテストの内部

$el.find('input').prop('checked', $scope.ngModel); 

=

element = angular.element("<div *directiveName* ><div><input type=\"checkbox\" ngModel=checked /> </div></div>"); 

     $rootScope = $rootScope.$new(); 
     $compile(element)($rootScope); 
     $rootScope.$digest(element); 

     scope = element.isolateScope(); 

をチェックする通常I)は、(等しいelement.scopeにスコープを設定します。私はこの右側にisolateScope()メソッドを呼び出すでしょうか?

Iはスペックしかし、scope.ngModelが未定義

 expect(scope.ngModel).to.equal('checked'); 

ように単純であるべきである)ので、私は要素isolateScopeを(等しい範囲を設定だと信じていました。私は、ディレクティブを作成したり、テストを呼び出すときに何が欠けているのか分かりません。どんな方向にも感謝します。

+0

ディレクティブは独立した範囲を持っていますか? try scope = element.isolateScope()|| element.scope;両方のシナリオをカバーします。 – sdfacre

答えて

1

値を正しく要素に渡していません。それはでなければなりません:

element = angular.element("<div *directiveName* ><div><input type=\"checkbox\" ng-model=checked /> </div></div>"); 

変更はngModelではなくng-modelです。

組み込み角度ディレクティブと混同しているため、ディレクティブのカスタム属性に別の名前を使用することもお勧めします。

+0

私が書いたのは私の指示だったと思います。私は単にそれをテストしています。 ngModelは正確には – Winnemucca

+0

のように属性の名前を変更することはできませんが、テストではngModelではなくng-modelにする必要があります。 – Austin

+0

あなたの意見を参照してください。私はラクダのケーシングのエラーをキャッチしました。しかし、ngModelはまだ私のテストでは未定義です。追加のステップが何であるかは不明です。 – Winnemucca

関連する問題