Можно ли использовать Protractor для проверки значения переменной, не связанной с моделью, с DOM?

Я относительно новичок в Angular и new (today) для Protractor, поэтому я не совсем уверен, как задать этот вопрос, поэтому я не совсем уверен, есть ли дубликат. Ниже представлена очень упрощенная версия гораздо большего, гораздо более сложного приложения, которое мы разрабатываем, но основная идея такая же.

Скажем, у меня есть простая веб-страница:

<button id="submit-button" ng-click="doSomething()">
 Click Me
</button>

Контролируется упрощенным угловым приложением:

// some-angular-app.js

$scope.myValue = "";
$scope.computedValue = null;

$scope.doSomething = function() {
 $scope.computedValue = "Hello World";
}

По сути, когда вы нажимаете на кнопку, она запускает функцию, которая манипулирует переменными в вашем приложении. В нашем случае (как указано выше) переменные (т.е. $scope.computedValue) никак не связаны с DOM - они фактически скомпилированы и переданы в запрос JSON, который будет использоваться нашим API. Тем не менее, я хочу проверить эти значения - что-то вроде:

// some-protractor-test.js

describe('form submission', function() {
 it('should corretly set the computed value', function() {
 browser.get('http://our.awesome-web.page');
 element(by.css("#my-input")).sendKeys("Hello Input");
 element(by.css("#submit-button")).click();

 // ??? how to check that computedValue === "Hello World" ???
 });
});

Можно ли использовать Protractor для проверки состояния наших данных таким образом или все взаимодействия с Angular app обрабатываются через элементы DOM?

2 ответа

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


Вы также можете использовать функцию оценки() для получения значения модели:

groupCode.evaluate('groupCode').then(function(value) {
 console.log(value);
});

licensed under cc by-sa 3.0 with attribution.