Я тестирую Транспортир с небольшим приложением AngularJS.
Это испытание:
describe('Testing Protractor', function() {
var draftList;
it('should count the number of drafts', function() {
browser.get('#/');
draftList = element.all(by.repeater('newsletter in drafts'));
expect(draftList.count()).toEqual(2);
});
});
Контроллер:
angular.module('myApp.controllers', []).
controller('DraftsCtrl', ['$scope', 'Draft', function($scope, Draft) {
$scope.drafts = Draft.query();
}])
Проект служба:
angular.module('myApp.services', ['ngResource']).
factory('Draft', ['$resource',
function($resource) {
return $resource('api/drafts/:id')
}])
Выполнение этого теста с использованием результатов транспортира в следующей ошибке:
Однако, если в контроллере я изменить эту строку:
$scope.drafts = Draft.query();
к этому:
$scope.drafts = [];
Тест терпит неудачу, как и ожидалось, но что более важно: это не тайм-аут.
С включенным запросом(), как при запуске приложения вручную в браузере, так и при просмотре окна браузера, открытого в Protractor, данные, возвращаемые API, корректно отображаются ретранслятором.
Почему Protractor не может синхронизироваться со страницей, когда служба взаимодействует с API?
AngularJS - v1.2.0-rc3. Транспортир v0.12.0.
Спасибо, я постараюсь это позже, и пусть вы знаете, работал ли он. На самом деле я действительно прочитал эту проблему GitHub перед публикацией здесь, но у меня создалось впечатление, что обходной путь необходим только при регулярном опросе API, который мое тестовое приложение не делает. Он отправляет запрос API только один раз, когда контроллер инициализируется. –
Это действительно правильное решение. Поскольку Protractor 0.12.0 предоставляет экземпляр Protractor как «браузер», достаточно было просто добавить 'browser.ignoreSynchronization = true;' перед 'element.all (by.repeater ('...'));'. –
Прекрасно работает! – softvar