navigate javascript angularjs angular-mock

javascript - navigate - ¿Cómo devolver el contenido de un archivo desde $ httpBackend de angular?



router navigate back angular (3)

Estoy tratando de configurar un conjunto de pruebas e2e en angular, y necesito devolver respuestas enlatadas usando $ httpBackend. Sería bueno si pudiera devolver un contenido de archivo, por ejemplo

$httpBackend.whenPOST(''/phones'').respond(function(method, url, data) { return getContentOf("/somefile"); });

Intenté usar $ http, algo parecido a

$httpBackend.whenPOST(''/phones'').respond(function(method, url, data) { return $http.get("/responses/phones.js"); });

pero no funcionó, ¿supongo que angular no admite promesas devueltas de $ httpBackend?

Una forma en que podría hacerlo es hacer referencia a los archivos js con respuestas en la carga de la aplicación y asignar el contenido del archivo a las variables, pero sería mucho mejor poder cargar los datos a pedido.


$ httpBackend.whenPost devuelve un objeto requestHandler.

Según los documentos oficiales:

requestHandler (es) un objeto con método de respond que controla cómo se maneja una solicitud coincidente.

  • responder
    {function([status,] data[, headers, statusText]) | function(function(method, url, data, headers)}
    - El método de respuesta requiere la devolución de un conjunto de datos estáticos o una función que puede devolver una matriz que contiene el estado de respuesta (número), datos de respuesta (cadena), encabezados de respuesta (Objeto) y el texto del estado (cadena).

Fuente: Documentaciones angulares.

El método de respuesta requiere la devolución de un conjunto de datos estáticos o una función que puede devolver una matriz que contiene el estado de respuesta (número), datos de respuesta (cadena) y encabezados de respuesta (Objeto).

Entonces, tendrás que hacer algo como esto:

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);


Dado que $ httpBackend no funciona con promesas devueltas, una forma en que puede hacer esto es obtener sus datos de forma sincrónica. $ http no tiene una opción síncrona fuera de la caja, por lo que tendría que hacer la llamada a su archivo sin él, así:

$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, {}]; });


Tuve el mismo problema que resolví con:

$httpBackend.whenPOST("some/url").respond(function(method, url, data) { return $resource("path/to/your/json/file.json").get(); });

Esto obviamente necesita angular-resource módulo de angular-resource para funcionar.