Как вернуть содержимое файла из angular $httpBackend?
Я пытаюсь установить тестовый набор e2e в angular, и вам нужно вернуть законченные ответы с помощью $httpBackend. Было бы неплохо, если бы я мог просто вернуть содержимое файла, например.
$httpBackend.whenPOST('/phones').respond(function(method, url, data) {
return getContentOf("/somefile");
});
Я пытался использовать $http, что-то вроде строк
$httpBackend.whenPOST('/phones').respond(function(method, url, data) {
return $http.get("/responses/phones.js");
});
но это не сработало, угадайте angular не поддерживает возврат promises из $httpBackend?
Один из способов сделать это - связать файлы js с ответами на загрузку приложения и присвоить содержимое файла переменным, но было бы намного лучше загружать данные по запросу.
Ответы
Ответ 1
Так как $httpBackend не работает с возвращенным promises, один из способов сделать это - синхронизировать ваши данные. $http не имеет синхронной опции из коробки, поэтому вам нужно будет сделать вызов в ваш файл без него:
$httpBackend.whenPOST('/phones').respond(function(method, url, data) {
var request = new XMLHttpRequest();
request.open('GET', '/responses/phones.js', false);
request.send(null);
return [request.status, request.response, {}];
});
Ответ 2
У меня была та же проблема, с которой я решил:
$httpBackend.whenPOST("some/url").respond(function(method, url, data) {
return $resource("path/to/your/json/file.json").get();
});
Для работы явно нужен модуль angular-resource
.
Ответ 3
$httpBackend.whenPost возвращает объект requestHandler.
Согласно официальным документам:
requestHandler
(is) объект с методом respond
, который управляет обработкой согласованного запроса.
- ответ -
{function([status,] data[, headers, statusText]) | function(function(method, url, data, headers)}
- Метод ответа принимает набор возвращаемых статических данных или функцию, которая может возвращать массив, содержащий статус (номер) ответа, данные ответа (строка), заголовки ответов (объект) и текст для состояния (строки).
source: Angular Документация
Метод ответа принимает набор возвращаемых статических данных или функцию, которая может возвращать массив, содержащий статус (число) ответа, данные ответа (строка) и заголовки ответа (объект).
Итак, вам нужно сделать что-то вроде этого:
var response = 'content of somefile.js';
// OR var response = { foo : "bar" };
// OR var response = (actually consume content of somefile.js and set to response)
$httpBackend.whenPost('/phones').respond(response);