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 测试将来会被Protractor取代(请参阅文档

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

在检查是否未检查某些内容时,至少有一个缺点是该元素是否不存在或是否存在拼写错误,该值仍为 0,如本例所示:

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

于 2012-09-18T21:20:47.227 回答