Улучшить документацию Просмотреть исходный код $httpBackend
- сервис в модуле ngMockE2E
Обзор
Реализация фиктивного HTTP-бекенда, подходящая для тестирования взаимодействия с конечным пользователем или для разработки приложений без бэкенда, использующих сервис $http.
Эта реализация может использоваться для ответа статическими или динамическими ответами через API when и его сокращения (whenGET, whenPOST, и т. д.) и, по желанию, передавать запросы в реальный $httpBackend для определённых запросов (например, для взаимодействия с определёнными удалёнными API или для извлечения шаблонов с веб-сервера).
В отличие от юнит-тестирования, в сценарии тестирования взаимодействия с конечным пользователем или в сценарии, когда приложение разрабатывается с заменой реального бэкенда API на макет, часто желательно, чтобы определённая категория запросов обходила макет и отправляла реальный HTTP-запрос (например, для извлечения шаблонов или статических файлов с веб-сервера). Для настройки бэкенда с таким поведением используйте обработчик запросов passThrough из when вместо respond.
Кроме того, мы не хотим вручную выполнять сброс запросов, смоделированных в макете, как мы делаем при юнит-тестировании. По этой причине $httpBackend для тестирования взаимодействия с конечным пользователем автоматически сбрасывает запросы, смоделированные в макете, что тесно имитирует поведение объекта XMLHttpRequest.
Чтобы настроить приложение для работы с этим HTTP-бекендом, необходимо создать модуль, зависящий от ngMockE2E и модулей вашего приложения, и определить фиктивный бэкенд:
var myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
myAppDev.run(function($httpBackend) {
var phones = [{name: 'phone1'}, {name: 'phone2'}];
// returns the current list of phones
$httpBackend.whenGET('/phones').respond(phones);
// adds a new phone to the phones array
$httpBackend.whenPOST('/phones').respond(function(method, url, data) {
var phone = angular.fromJson(data);
phones.push(phone);
return [200, phone, {}];
});
$httpBackend.whenGET(/^\/templates\//).passThrough(); // Requests for templates are handled by the real server
//...
});
После этого запустите своё приложение с этим новым модулем.
Методы
-
when(method, url, [data], [headers], [keys]);
Создаёт новое определение бэкэнда.
Параметры
Параметр Тип Подробности method stringМетод HTTP.
url stringRegExpfunction(string)=HTTP-адрес или функция, которая получает адрес и возвращает true, если адрес соответствует текущему определению.
data (необязательно)stringRegExpfunction(string)Тело HTTP-запроса или функция, которая получает строку данных и возвращает true, если данные соответствуют ожидаемым.
headers (необязательно)Objectfunction(Object)HTTP-заголовки или функция, которая получает объект заголовков и возвращает true, если заголовки соответствуют текущему определению.
keys (необязательно)ArrayМассив ключей для присвоения совпадениям в регулярном выражении адреса запроса, описанных в $httpBackend mock.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют тем, как обрабатывается соответствующий запрос. Вы можете сохранить этот объект для последующего использования и снова вызватьrespondилиpassThrough, чтобы изменить способ обработки соответствующего запроса.- respond –
{ function([status,] data[, headers, statusText]) | function(function(method, url, data, headers, params)}– Метод respond принимает набор статических данных для возврата или функцию, которая может вернуть массив, содержащий код состояния ответа (число), данные ответа (массив/объект/строка), заголовки ответа (объект) и текст для состояния (строка). - passThrough –
{function()}– Любой запрос, соответствующий определению бэкэнда с обработчикомpassThrough, будет передан реальному бэкэнду (будет выполнен XHR-запрос на сервер). - Оба метода возвращают объект
requestHandlerдля возможных перезаписей.
- respond –
-
whenGET(url, [headers], [keys]);
Создаёт новое определение бэкэнда для GET-запросов. Дополнительная информация в
when().Параметры
Параметр Тип Подробности url stringRegExpfunction(string)=HTTP-адрес или функция, которая получает адрес и возвращает true, если адрес соответствует текущему определению.
headers (необязательно)Objectfunction(Object)HTTP-заголовки.
keys (необязательно)ArrayМассив ключей для присвоения совпадениям в регулярном выражении адреса запроса, описанных в $httpBackend mock.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют тем, как обрабатывается соответствующий запрос. Вы можете сохранить этот объект для последующего использования и снова вызватьrespondилиpassThrough, чтобы изменить способ обработки соответствующего запроса. -
whenHEAD(url, [headers], [keys]);
Создаёт новое определение бэкэнда для HEAD-запросов. Дополнительная информация в
when().Параметры
Параметр Тип Подробности url stringRegExpfunction(string)=HTTP-адрес или функция, которая получает адрес и возвращает true, если адрес соответствует текущему определению.
headers (необязательно)Objectfunction(Object)HTTP-заголовки.
keys (необязательно)ArrayМассив ключей для присвоения совпадениям в регулярном выражении адреса запроса, описанных в $httpBackend mock.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют тем, как обрабатывается соответствующий запрос. Вы можете сохранить этот объект для последующего использования и снова вызватьrespondилиpassThrough, чтобы изменить способ обработки соответствующего запроса. -
whenDELETE(url, [headers], [keys]);
Создаёт новое определение бэкэнда для DELETE-запросов. Дополнительная информация в
when().Параметры
Параметр Тип Подробности url stringRegExpfunction(string)=HTTP-адрес или функция, которая получает адрес и возвращает true, если адрес соответствует текущему определению.
headers (необязательно)Objectfunction(Object)HTTP-заголовки.
keys (необязательно)ArrayМассив ключей для присвоения совпадениям в регулярном выражении адреса запроса, описанных в $httpBackend mock.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют тем, как обрабатывается соответствующий запрос. Вы можете сохранить этот объект для последующего использования и снова вызватьrespondилиpassThrough, чтобы изменить способ обработки соответствующего запроса. -
whenPOST(url, [data], [headers], [keys]);
Создаёт новое определение бэкэнда для POST-запросов. Дополнительная информация в
when().Параметры
Параметр Тип Подробности url stringRegExpfunction(string)=HTTP-адрес или функция, которая получает адрес и возвращает true, если адрес соответствует текущему определению.
data (необязательно)stringRegExpfunction(string)Тело HTTP-запроса или функция, которая получает строку данных и возвращает true, если данные соответствуют ожидаемым.
headers (необязательно)Objectfunction(Object)HTTP-заголовки.
keys (необязательно)ArrayМассив ключей для присвоения совпадениям в регулярном выражении адреса запроса, описанных в $httpBackend mock.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют тем, как обрабатывается соответствующий запрос. Вы можете сохранить этот объект для последующего использования и снова вызватьrespondилиpassThrough, чтобы изменить способ обработки соответствующего запроса. -
whenPUT(url, [data], [headers], [keys]);
Создаёт новое определение бэкэнда для PUT-запросов. Дополнительная информация в
when().Параметры
Параметр Тип Подробности url stringRegExpfunction(string)=HTTP-адрес или функция, которая получает адрес и возвращает true, если адрес соответствует текущему определению.
data (необязательно)stringRegExpfunction(string)Тело HTTP-запроса или функция, которая получает строку данных и возвращает true, если данные соответствуют ожидаемым.
headers (необязательно)Objectfunction(Object)HTTP-заголовки.
keys (необязательно)ArrayМассив ключей для присвоения совпадениям в регулярном выражении адреса запроса, описанных в $httpBackend mock.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют тем, как обрабатывается соответствующий запрос. Вы можете сохранить этот объект для последующего использования и снова вызватьrespondилиpassThrough, чтобы изменить способ обработки соответствующего запроса. -
whenPATCH(url, [data], [headers], [keys]);
Создаёт новое определение бэкэнда для PATCH-запросов. Дополнительная информация в
when().Параметры
Параметр Тип Подробности url stringRegExpfunction(string)=HTTP-адрес или функция, которая получает адрес и возвращает true, если адрес соответствует текущему определению.
data (необязательно)stringRegExpfunction(string)Тело HTTP-запроса или функция, которая получает строку данных и возвращает true, если данные соответствуют ожидаемым.
headers (необязательно)Objectfunction(Object)HTTP-заголовки.
keys (необязательно)ArrayМассив ключей для присвоения совпадениям в регулярном выражении адреса запроса, описанных в $httpBackend mock.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют тем, как обрабатывается соответствующий запрос. Вы можете сохранить этот объект для последующего использования и снова вызватьrespondилиpassThrough, чтобы изменить способ обработки соответствующего запроса.
-
whenJSONP(url, [keys]);
Создает новое определение бэкэнда для запросов JSONP. Дополнительную информацию см. в
when().Параметры
Параметр Тип Подробности url stringRegExpfunction(string)=HTTP-url или функция, которая принимает url и возвращает true, если url соответствует текущему определению.
keys (необязательно)ArrayМассив ключей для присвоения совпадениям с регулярными выражениями в url запроса, описанных на странице $httpBackend mock.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют обработкой соответствующего запроса. Вы можете сохранить этот объект для последующего использования и вызватьrespondилиpassThroughснова, чтобы изменить способ обработки соответствующего запроса. -
whenRoute(method, url);
Создает новое определение бэкэнда, которое сравнивает только с запрошенным маршрутом.
Параметры
Параметр Тип Подробности method stringHTTP-метод.
url stringСтрока HTTP-url, которая поддерживает сопоставление с параметрами, заключенными в двоеточия.
Возвращаемое значение
requestHandlerВозвращает объект с методами
respondиpassThrough, которые управляют обработкой соответствующего запроса. Вы можете сохранить этот объект для последующего использования и вызватьrespondилиpassThroughснова, чтобы изменить способ обработки соответствующего запроса. -
matchLatestDefinitionEnabled([value]);
Этот метод можно использовать для изменения того, какие смоделированные ответы
$httpBackendвозвращает при определении их с помощью $httpBackend.when() (и сокращенных методов). По умолчанию$httpBackendвозвращает первое определение, которому соответствует запрос. При установке$http.matchLatestDefinitionEnabled(true), будет использоваться последний ответ, который соответствует, т.е. тот, который был добавлен последним.hb.when('GET', '/url1').respond(200, 'content', {}); hb.when('GET', '/url1').respond(201, 'another', {}); hb('GET', '/url1'); // receives "content" $http.matchLatestDefinitionEnabled(true) hb('GET', '/url1'); // receives "another" hb.when('GET', '/url1').respond(201, 'onemore', {}); hb('GET', '/url1'); // receives "onemore"Это полезно, если у вас есть ответ по умолчанию, который переопределяется внутри конкретных тестов.
Обратите внимание, что в отличие от методов конфигурации поставщиков,
matchLatestDefinitionEnabled()можно изменять даже когда приложение уже запущено.Параметры
Параметр Тип Подробности value (необязательно)BooleanЗначение для установки, либо
trueилиfalse. Значение по умолчаниюfalse. Если опущено, вернет текущее значение.Возвращаемое значение
$httpBackendBooleanсамо объект, если используется в качестве установщика, и текущее значение, если используется в качестве получателя.
Пример
© 2010–2020 Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
https://code.angularjs.org/1.8.2/docs/api/ngMockE2E/service/$httpBackend