3

いくつかのラジオオプションを含む角度のあるページがあります。そのセクションは次のようになります(要約):

div.row-fluid(ng-controller="SearchCtrl")
  ...
  form(name="pForm")
    ... 
    div.span4
    input(ng-model='form.worktype', type='radio', value='fulltime', name='worktype') 
    |     Full Time    
    input(ng-model='form.worktype', type='radio', value='parttime', name='worktype') 
    |     Part Time
    p hello {{form.worktype}}

フォームは機能し、「p hello {{form.worktype}}」は機能しますが、e2e テスト内で選択が見つからないようです:

it('should select the ', function() {
  element('a[href$="addWork"]').click();
  input('form.worktype').select('parttime');
  expect(binding('form.worktype')).toBe('parttime');
});

戻り値:

Binding selector 'form.worktype' did not match

また、別のアプローチも失敗します。

it('should select the ', function() {
  element('a[href$="addWork"]').click();
  input('form.worktype').select('parttime');
  expect(input('form.worktype').val()).toBe('parttime');
});

テストの一時停止()がパートタイムが選択されていることを明確に示していても、「フルタイム」を提供します。

この一見単純なことを通過させる方法についてのアイデアはありますか?

4

1 に答える 1

3

Angular での e2e テストで同じ問題に遭遇しました。いくつかの作品は少し気難しいです。フォーム要素バインディングで binding() を動作させることができませんでした。私は最初にあなたと同じことを試みましたが、ラジオボタンの val の入力選択は、実際に選択されたものではなく、最初に見つかったラジオボタンに割り当てられた値を取得します。

私の最終的な回避策は、チェックされたその名前の入力要素を取得し、その値を調べることになりました。これはうまくいくはずです。

expect(element('input[name="worktype"]:checked').val()).toBe('parttime');

バインディングのすべての力とモデルの使用により、より良い解決策があると思うかもしれませんが、私は何も見つけていません。代わりに、個々の要素を取得してそこから作業するために、非常に具体的なセレクターを実行する必要があることに気付きました。理想的ではありませんが、機能的です。

そうは言っても、e2e テストに関する Angular のページでは、Protractor を読むことを提案しています。彼らは将来それを使用するためです。うまくいけば、準備が整ったら、より良い e2e テストができるようになるでしょう。

于 2013-11-08T16:02:03.290 に答える