Mi prueba de jazmín para $ httpBackend no funcionará a menos que agregue el nombre de dominio, es decir, http://localhost:9808/
Como esta prueba se usa en varios entornos diferentes, no puedo usar http://localhost:9808/
Sin el dominio me sale este error:
Error no detectado: solicitud inesperada: GET http://localhost:9808/api/mymethod No se espera más solicitud
describe("test my service", function () {
"use strict";
var $httpBackend,
myService;
beforeEach(inject(function (_$injector_, _$httpBackend_) {
var $injector = _$injector_;
$httpBackend = _$httpBackend_;
myService = $injector.get("myService");
// this works
//$httpBackend.whenGET("http://localhost:9808/api/mymethod").respond(200, mockData);
// this throws error
$httpBackend.whenGET("/api/mymethod").respond(200, mockData);
}));
afterEach(function () {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it("check service exists and has methods", function () {
expect(myService).toBeDefined();
expect(myService.somemethod).toBeDefined();
$httpBackend.flush();
});
});
Incluso traté de añadir estas líneas a la antes de cada
// esto también arroja un error
$ httpBackend.when ("GET", "/api/mymethod").respond(200, mockData);
// incluso agregando expect aún arroja el error en beforeEach $ httpBackend.expectGET ("/ api / mymethod");
¿Alguna idea o sugerencia sobre cómo hacer que esto funcione sin usar el dominio?
Aquí está el código de servicio que realmente hace la solicitud:
(function(app) {
"use strict";
function MyService(apiService) {
var returnDataObject = [];
apiService.getAll().then(function(result) {
returnDataObject = result.data;
});
this.myMethod = function() {
if(returnDataObject) {
return returnDataObject;
}
else {
return null;
}
};
}
app.service("MyService", MyService);
MyService.$inject = ["APIService"];
})(angular.module("app.mymodule"));
Respuestas
0 para la respuesta № 1Supongo que podrías usar una expresión regular para hacer coincidir la URL
Podrías hacerlo:
var method = "GET";
var url = "/mymethod";
$httpBackend.when(method, new RegExp("\" + url)).respond(200, mockData);
0 para la respuesta № 2
Ok despues de ver este post https://stackoverflow.com/questions/29809436/cannot-inject-providers-into-karma-test
Pude resolver mi problema agregando el beforeEach a mi archivo de especificaciones. Estoy usando angular v1.5.4 y angular-ui-router v0.2.18
beforeEach(module(function($urlRouterProvider) {
$urlRouterProvider.deferIntercept();
}));