30

AngularJS e2e テストを試してみましたが、チェックボックスがチェックされているかどうかを判断するのに行き詰まっています。

サンプルとして、チェックボックス入力のエンド ツー エンド テストを使用しました(「例」の「エンド ツー エンド テスト」タブを参照)。

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あり、チェックボックスがチェックされた状態であるかどうかとは関係ありません (この投稿から取得)。


注: Angular E2E テストは、将来的に分度器に置き換えられるようです (ドキュメントを参照してください) 。

4

3 に答える 3

55

Protractorを使用している人には、まさにこれのためのwebdriver isSelected()があります。

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

expect(element(by.model('value1')).isSelected()).toBeTruthy();
于 2014-09-07T22:27:47.570 に答える
16

私は同じ問題を抱えていたので、この質問に賛成しました。テストでは次の回避策を使用しましたが、より良い方法を期待しています。

expect( element('input[ng-model="value1"]').attr('checked') ).toBeTruthy();
于 2012-09-18T22:09:03.993 に答える
1

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

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

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

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

于 2012-09-18T21:20:47.227 に答える