Подтвердить что ты не робот

Как вернуть содержимое файла из 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 с ответами на загрузку приложения и присвоить содержимое файла переменным, но было бы намного лучше загружать данные по запросу.

4b9b3361

Ответ 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);