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 derespond
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.