web-dev-qa-db-ja.com

AngularJS e2eテストでチェックボックスがチェックされているときに検証する方法は?

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 から取得)。


注:Angular E2Eテストは 分度器 に置き換えられます将来( ドキュメント を参照)

30
Gloopy

私は同じ問題を抱えていたので、この質問を支持しました。テストでは次の回避策を使用しましたが、より良い方法を見つけたいと思っています。

expect( element('input[ng-model="value1"]').attr('checked') ).toBeTruthy();
16
Tosh

分度器 を使用している人には、まさにこれのためのウェブドライバー isSelected() があります。

checked属性を要求する代わりに、次のことができます。

expect(element(by.model('value1')).isSelected()).toBeTruthy();
54
Leo Gallucci

より良い方法があることを望んでいますが、そのモデルバインディングに一致するチェックされた入力要素の数を検証することでこれを回避しました:

expect(element('input[ng-model="value1"]:checked').count()).toBe(1);

何かがチェックされていないかどうかをチェックするときの少なくとも1つのマイナス面は、要素が存在しない場合、またはタイプミスがあった場合、値はこの例のように0のままです。

expect(element('input[ng-model="valueDoesNotExist"]:checked').count()).toBe(0);

1
Gloopy