用于单选按钮的Angular E2E测试绑定

时间:2013-09-30 09:48:22

标签: angularjs angularjs-e2e

我有一个带有一些无线电选项的角度页面,该部分看起来像这样(删节):

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');
});

给我“全时”,即使测试中的暂停()清楚地显示选择了部分时间。

关于如何使这个看似简单的事情的任何想法都通过了?

1 个答案:

答案 0 :(得分:3)

我在Angular中遇到了与e2e测试相同的问题。有些部分有点挑剔。我无法使用binding()来处理表单元素绑定。我首先尝试了你做的同样的事情,但是单选按钮上的val输入选择获取分配给它找到的第一个单选按钮的值,而不是实际选择的那个。

我最终的工作归结为获取具有该名称的输入元素,该元素也被检查,然后查看它的值。这应该适合你。

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

凭借绑定的全部功能和模型的使用,您会认为会有更好的解决方案,但我没有找到。相反,我发现自己必须做非常具体的选择器来获得一个单独的元素,并从那里开始工作。不太理想,但功能强大。

话虽如此,the Angular page on e2e testing建议阅读Protractor,因为他们将来会使用它,所以希望在准备就绪后,我们将能够进行更好的e2e测试。