Подтвердить что ты не робот

Как проверить, установлен ли флажок в тестах AngularJS e2e?

Я тестировал тесты AngularJS e2e и зацикливаюсь, проверяя, установлен ли флажок.

Я использовал тест конца для конца для checkbox input в качестве образца (см. вкладку "Завершение теста" в примере).

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 в будущее (см. документы)

4b9b3361

Ответ 1

Я поддержал этот вопрос, поскольку у меня была такая же проблема. Я использовал следующий обходной путь в своем тесте, но я надеюсь увидеть лучший способ.

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

Ответ 2

Для тех, кто использует Protractor, именно для этого есть webdriver isSelected().

Вместо запроса атрибута checked вы можете сделать:

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

Ответ 3

Я надеюсь, что есть лучший способ, но я обошел это, проверив количество проверенных элементов ввода, соответствующих этой привязке модели:

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

По крайней мере, один недостаток этого при проверке того, что что-то не проверяется, - это если элемент не существует или существует опечатка, значение все равно будет 0, как в этом примере:

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