Хотя я считаю, что следую инструкциям здесь для настройки $httpBackend для передачи выбранных запросов на сервер, он не работает для меня.
Вот Plunkr с неудачным тестом, который показывает, что я делаю, и объясняет в комментариях, что кажется неправильным.
Мое заклинание предполагает, что по какой-то причине макет $httpBackend
не имеет внутренней копии реального $httpBackend
, так что, когда приходит время пройти через запрос XHR, он передает его в макет $httpBackend
. Этот второй вызов выдает исключение, потому что он не знает, что делать с запросом.
Ответ на dtabuenc
Я с благодарностью вспоминаю ваш пост на промежуточном тестировании. Вы определяете важный диапазон интеграционных тестов, который находится между тестированием unit- и E2E. Я стою на этой средней земле.
Я не думаю, что ты вообще злой. Ваш ответ совершенно разумный... или он был бы разумным, если бы он не противоречил тексту ссылки API/ngMockE2E/$httpBackend". Я цитирую:
Эта реализация может использоваться для ответа статическими или динамическими ответами с помощью
when
api и его ярлыков (whenGET
,whenPOST
и т.д.) и необязательно передавать запросы реальному$httpBackend
для (например, для взаимодействия с определенным удаленным apis или для получения шаблонов с веб-сервера)...[I] n сценарий сквозного тестирования или сценарий, когда приложение разрабатывается с заменой реального бэкэнда api на макет, часто желательно, чтобы определенная категория запросов обходила макет и выдать реальный http-запрос. Чтобы настроить бэкэнд с этим поведением, используйте обработчик запроса
passThrough
, если вместоrespond
. [emphasis mine].
В документации не говорится об использовании E2E $httpBackend
в среде Jasmine. Я не могу придумать причины, чтобы исключить его. Если есть такая причина, они должны четко заявить об этом. Серьезно, кто читает о макетном компоненте и не ожидает его использования в тестовой среде?
Чтобы "передавать запросы к реальному $httpBackend
для определенных запросов, например, взаимодействовать с определенным удаленным apis", именно то, что я намереваюсь сделать. Что они могут иметь в виду под "реальным $httpBackend", кроме не-макетной версии этого компонента?
Я не понимаю ваших утверждений о том, что
Модуль
ngMocksE2E
предназначен для использования на стороне сервера, где выполняется фактическое приложение angular.
Слово "сервер" отображается ровно 3 раза на этой странице, ни разу не предлагая, чтобы какой-либо код приложения выполнялся на "сервере". Я не знаю, что вы подразумеваете под "фактическим приложением angular", выполняющим "сторону сервера".
В документации совершенно ясно, что E2E $httpBackend
не ограничивается тестированием E2E. Это также относится к "сценарию, когда приложение разрабатывается с заменой реального бэкэнда api на макет".
Это на полшага от моего сценария, в котором приложение проверено с реальным backend api. "
В моих сценариях SUT вызывает компонент, который извлекает данные с сервера. Мои тесты существуют для проверки того, что этот зависимый компонент успешно выполняет такие запросы реального бэкэнд и будет получать или сохранять данные ожидаемым образом. Это интеграционный тест, который не может быть адекватно удовлетворен, насмехаясь над поведением бэкэнд.
Конечно, я могу протестировать (и сделать тест) с ложными ответами XHR, что способность компонента правильно реагировать на то, что я предсказываю, будет бэкэндом. Это не то же самое, что проверка того, что компонент отвечает соответствующим образом действительному бэкэнд-поведению... который может измениться по мере того, как приложение развивается и отходит от посмеиваемых ответов каким-то значительным образом.
Я бы подумал о том, чтобы использовать ваш тестер на полпути для этой цели, если я понял, как поменять его на код кода SUT. Я не. Я думаю, что компонент, создающий запросы XHR, недоступен для вашего ngMidwayTester
. Но я знаю, как замять реальный помощник XHR в конвейер, если мне нужно.
Здесь я нахожусь в данный момент.
Либо кто-то может показать, как сделать $httpBackend
передавать определенные запросы на сервер - как заявляет документация, - или я сам заменит реализацию passThrough
на рабочую реализацию XHR.
Я предпочитаю первый вариант. Если перейти ко второму, я предложу ссылку на него здесь для других, которые разделяют мои потребности и мою интерпретацию документации API.
Есть ли третий способ, который мне не хватает?