angularjs - raw - insertar html angular
¿Por qué recibo un error? Solicitud inesperada: GET/internalapi/quotes (2)
Definí el siguiente servicio en mi aplicación angular:
services.factory(''MyService'', [''Restangular'', function (Restangular) {
return {
events : { loading : true },
retrieveQuotes : function() {
return Restangular.all(''quotes'').getList().then(function() {
return { hello: ''World'' };
});
}
};
}]);
y estoy escribiendo las siguientes especificaciones para probarlo:
describe("MyService", function () {
beforeEach(module(''MyApp''));
beforeEach(module("restangular"));
var $httpBackend, Restangular, ms;
beforeEach(inject(function (_$httpBackend_, _Restangular_, MyService) {
ms = MyService;
$httpBackend = _$httpBackend_;
Restangular = _Restangular_;
}));
it("retrieveQuotes should be defined", function () {
expect(ms.retrieveQuotes).toBeDefined();
});
it("retrieveQuotes should return array of quotes", function () {
$httpBackend.whenGET("internalapi/quotes").respond({ hello: ''World'' });
ms.retrieveQuotes();
$httpBackend.flush();
});
});
Cada vez que ejecuto las pruebas, la primera prueba pasa pero la segunda prueba produce el error:
Error: Unexpected request: GET /internalapi/quotes
¿Qué estoy haciendo mal?
EDITAR:
Resultó que había configurado Restangular
como tal ... RestangularProvider.setBaseUrl("/internalapi");
. Pero estaba fingiendo llamadas a internalapi/quotes
. Observe la falta de "/". Una vez que agregué el slash /internalapi/quotes
todo fue bueno :)
Debe decirle a $ httpBackend que debe esperar una solicitud GET.
describe("MyService", function () {
beforeEach(module(''MyApp''));
beforeEach(module("restangular"));
var Restangular, ms;
beforeEach(inject(function (_Restangular_, MyService) {
ms = MyService;
Restangular = _Restangular_;
}));
it("retrieveQuotes should be defined", function () {
expect(ms.retrieveQuotes).toBeDefined();
});
it("retrieveQuotes should return array of quotes", inject(function ($httpBackend) {
$httpBackend.whenGET("internalapi/quotes").respond({ hello: ''World'' });
//expect a get request to "internalapi/quotes"
$httpBackend.expectGET("internalapi/quotes");
ms.retrieveQuotes();
$httpBackend.flush();
}));
});
Alternativamente, puede poner su respond()
en su expectGET()
. Prefiero poner mis declaraciones whenGET()
en beforeEach()
esa manera no tengo que definir la respuesta dentro de cada prueba.
//expect a get request to "internalapi/quotes"
$httpBackend.expectGET("internalapi/quotes").respond({ hello: ''World'' });
ms.retrieveQuotes();
$httpBackend.flush();
Tuve el mismo problema que ustedes. Mi solución fue agregar un ''/'' al comienzo del parámetro URL de .expectGET. Usando tu ejemplo:
$httpBackend.expectGET("/internalapi/quotes").respond({ hello: ''world''})
La mejor de las suertes