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

Я пробовал тесты 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 в будущее (см. документацию)


person Gloopy    schedule 18.09.2012    source источник


Ответы (3)


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

expect( element('input[ng-model="value1"]').attr('checked') ).toBeTruthy();
person Tosh    schedule 18.09.2012
comment
Спасибо! Мне это нравится больше, чем то, чем я сейчас занимаюсь. Я оставлю этот вопрос немного открытым на случай, если есть лучший способ :) - person Gloopy; 19.09.2012
comment
В карме следует использовать не attr, а prop. Для коллег-гуглеров. - person Offirmo; 12.03.2015
comment
Этот ответ не работает для меня. Ответ Лео Галлуччи работает. - person Elmux; 15.05.2018

Для тех, кто использует Protractor, есть веб-драйвер isSelected() именно для этого.

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

expect(element(by.model('value1')).isSelected()).toBeTruthy();
person Leo Gallucci    schedule 07.09.2014
comment
Когда я пытаюсь получить этот код, возникает исключение: недопустимое состояние элемента: элемент в настоящее время не взаимодействует и не может манипулироваться. Любая идея, как решить эту - person Pradeep; 01.09.2016
comment
Когда я работал с Protractor, я решил проблему с устаревшим элементом с помощью скрипта waitReady.js, см. : stackoverflow.com/questions/35533139/ - person Leo Gallucci; 01.09.2016

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

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

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

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

person Gloopy    schedule 18.09.2012