AngularJS e2e tests を試してきましたが、チェックボックスがチェックされているかどうかを判断するのに困っています。
サンプルとして チェックボックス入力 のエンドツーエンドテストを使用しました(例のエンドツーエンドテストタブを参照)。
Htmlスニペット:
_Value1: <input type="checkbox" ng-model="value1"> <br/>
_
コントローラースニペット:
_function Ctrl($scope) {
$scope.value1 = true;
}
_
ここに私が試したものがあります:
1)expect(binding('value1')).toEqual('true');
これは、_value1
_が画面に_{{value1}}
_と表示されている限り、サンプルのエンドツーエンドテストで機能します。これをローカルでテストし、 `{{value1}}を削除すると、バインディングテストは失敗します。私の実際の例のほとんどでは、画面のどこにもチェックボックス値を表示していません。
2)expect(input('value1').val()).toEqual('true');
値は常にon
にデフォルト設定され、チェックボックスがチェック状態にあるかどうかに関係しません( this post から取得)。
私は同じ問題を抱えていたので、この質問を支持しました。テストでは次の回避策を使用しましたが、より良い方法を見つけたいと思っています。
expect( element('input[ng-model="value1"]').attr('checked') ).toBeTruthy();
分度器 を使用している人には、まさにこれのためのウェブドライバー isSelected() があります。
checked
属性を要求する代わりに、次のことができます。
expect(element(by.model('value1')).isSelected()).toBeTruthy();
より良い方法があることを望んでいますが、そのモデルバインディングに一致するチェックされた入力要素の数を検証することでこれを回避しました:
expect(element('input[ng-model="value1"]:checked').count()).toBe(1);
何かがチェックされていないかどうかをチェックするときの少なくとも1つのマイナス面は、要素が存在しない場合、またはタイプミスがあった場合、値はこの例のように0のままです。
expect(element('input[ng-model="valueDoesNotExist"]:checked').count()).toBe(0);