Ответ 1
Невозможно выполнить этот сценарий с помощью Karma. Я расскажу о том, как работает Карма, как она сравнивается с Webdriver, и что было бы необходимо для реализации этого сценария.
Прежде всего, важно иметь в виду, что Karma и angular -ценарий - это не одно и то же. Карма - это общая оболочка для запуска тестов на основе браузера. Он запускает процессы браузера, запускает node для обслуживания веб-страницы, содержащей тестовый жгут, запускает тесты, отправляя команды через websocket, а затем собирает результаты. Это агностик в отношении фактического жгута/рамки, который проводит тесты. Он имеет адаптеры для сценария Angular (используется для тестов Angular e2e), Jasmine (обычно используется для модульных тестов Angular) и других популярных фреймворков JavaScript.
Тест-ролики, такие как Jasmine, выполняются в том же контексте окна, что и тестируемый код, поэтому он полезен для модульных тестов. Сценарий сценария Angular, напротив, имеет отношение длины руки к тестируемой системе. Он загружает все приложение в iframe, а затем по большей части имитирует пользовательские события и утверждения тестов на явно экспонированных элементах DOM.
Поскольку сценарий-бегун взаимодействует с приложением по границе iframe, он ограничен политикой браузера с одним доменом. Невозможно выполнить запуск сценария на http://localhost:8000
, затем загрузить http://yourapp
в iframe, а затем запустить события внутри этого iframe.
Один из способов - просто запустить сценарий на том же сервере, что и ваше приложение. Вот простой пример:
http://plnkr.co/edit/rfqpSq?p=preview
Тем не менее, крахмал тестового бегуна в приложении не очень удовлетворителен. Карма дает вам способ обойти это со встроенным прокси-сервером HTTP. Вы можете настроить Karma на прокси любое количество разных серверов, чтобы все они происходили из одного и того же источника. Просто добавьте их в разделproxies
файла конфигурации:
proxies = {
'/': 'http://yourapp/',
'/service/': 'http://service/'
}
Это позволяет вашим тестировкам e2e пересекать домены, но улов в том, что когда передача домена происходит посредством отправки или перенаправления формы, она должна быть связана с прокси-адресом. В противном случае бегун сценария потеряет управление iframe и не сможет продолжить тестирование.
Обратите внимание, что Selenium Webdriver не имеет этого ограничения. Он работает выше уровня отдельного окна браузера, поэтому он не ограничен одной и той же политикой домена.
Итак, давайте посмотрим на ваш конкретный сценарий. Что касается фактических HTTP-запросов и ответов, я предполагаю, что это поток, который вы хотите использовать:
- Загрузите приложение из
http://yoursite/yourapp.html
- Пользователь отправляет форму, которая выглядит следующим образом:
<form method="POST" action="http://service/remotesubmission">
...your form...
<input type="submit">
</form>
- Поставщик X обрабатывает удаленный POST, а затем перенаправляет на форму по адресу:
<form method="POST" action="http://service/nextsubmission">
...provider form...
<input type="submit">
</form>
- Поставщик X обрабатывает форму POST, а затем перенаправляет обратно в ваше приложение.
Если это реальный сценарий, то я думаю, что единственный способ сделать эту работу с кармой и сценарием сценария Angular будет:
- Уцените URL-адрес действия в своей форме, чтобы он указывал на прокси-адрес внешней службы при тестировании.
- Убедитесь, что URL-адреса перенаправления и действия в потоке провайдера остаются в пределах проксированных путей. Я не думаю, что в настоящее время это возможно, но, возможно, можно будет исправить Karma, чтобы настроить шаблоны замещения для проксированного контента.