2016-10-11 2 views
3

У меня есть ручное загрузочное угловое приложение с большим количеством испытаний на проталкивание. Примерно в июне 2016 года тесты работали, но больше не работают. С тех пор произошли следующие изменения:Испытания преградителя перестали работать после обновления до Углового 2

  • Угловые 2 было выпущено
  • Войти часть приложения была переписана. Первоначально страница входа в систему не использовала Angular. Теперь он использует Angular 2. Остальная часть приложения по-прежнему является угловой 1.

Если я не взаимодействую с приложением вне входа в систему и запускаю один тест (например, «ожидать (true) .toBe (true) "), затем все выполняется до завершения, без генерируемых сообщений об ошибках.

Если мой тест автоматизации делает взаимодействие с приложением, то происходит следующее:

  • Если мой conf.js файл содержит «useAllAngular2AppRoots: правда», я получаю сообщение об ошибке: «истекло время ожидания транспортир для синхронизации со страницей через 11 секунд. См. https://github.com/angular/protractor/blob/master/docs/faq.md «
  • Если мой файл conf.js не содержит« useAllAngular2AppRoots: true », я получаю сообщение об ошибке:« Ошибка при ожидании синхронизации Protractor со страницей: » Не удалось найти проверяемость для элемента. "

В любом случае автоматизация проходит через логин и в часть приложения Angular1.

Вопросы у меня есть:

  1. Является ли этот вид приложения (Angular2 страницу входа, все остальное Angular1) можно проверить с транспортир?
  2. Следует использовать «useAllAngular2AppRoots: true»?
  3. Сообщения об ошибках, которые я получаю, похоже, не указывают на конкретную область моего тестового кода для исправления. Как я могу определить, в чем проблема?

EDIT 27 октября 2016 После первого ответа на этот вопрос получил, я попытался придавить точно, что не удается, и где.

Я обнаружил, что:

  • установка RootElement в моем файле conf.js не имел никакого эффекта. Независимо от того, оставил ли я его полностью, специально настроил его на «тело» или установил его в случайную бессмысленную строку, я получил то же поведение.
  • Следуя приведенным предложениям, я все еще получал сообщение об ошибке «AfterAll Failed: Ошибка при ожидании синхронизации Protractor со страницей:« Не удалось найти тестовую возможность для элемента ».« Обратите внимание, что я не пытался делать какие-либо тесты в моей функции AfterAll, просто нажав кнопку «Выход»
  • , если я установил «browser.ignoreSynchronization = true» в функции beforeAll моего теста, я мог бы совершать вызовы, которые взаимодействовали с приложением, например, щелчок по элементам экрана. Без этой линии никакой вызов не имел никакого эффекта. Однако я уверен, что это не то, что я должен делать, или что мне нужно.
  • даже с 'браузером.ignoreSynchronization = true ', я все равно получаю сообщения об ошибках, когда пытаюсь сделать вызовы с помощью Angular1, например, пытаться сопоставить элемент с by.repeater(). Это произойдет в той части приложения, которая все еще записана в Angular 1, и поэтому использует ng-repeat, а не ngFor.

Предоставляет ли эта дополнительная информация какое-либо дальнейшее понимание того, что может произойти, и что еще я могу попробовать?

+0

Если решение от Urish сработало для вас, отметьте его как ответ. – santon

ответ

2

Прежде всего, вам необходимо убедиться, что вы используете последний транспортир (4.0.9) и zone.js> = 0.6.25.

Затем убедитесь, что вы установили browser.ng12Hybrid в true для каждой страницы, которая содержит гибрид углового 1 + 2 приложения, т.е .:

beforeEach(function() { 
    browser.ng12Hybrid = true; 
    browser.get('/somepage.html'); 
}); 

afterEach(function() { 
    browser.ng12Hybrid = false; 
}); 

Вы также можете найти пример в protractor's own test specs.

Что касается useAllAngular2AppRoots: true, его следует использовать только после того, как приложение полностью перенесено на Угловое 2, и вы удалили адаптер обновления, как описано here.

Удачи вам в вашем проекте!

+0

Спасибо за ответ. Я попытаюсь выполнить ваши предложения. – Phil

Смежные вопросы