/ / jasmine error $ httpBackend Solicitud inesperada sin dominio - angularjs, jasmine, httpbackend

Error de jasmine $ httpBackend Solicitud inesperada sin dominio - angularjs, jasmine, httpbackend

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 № 1

Supongo 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();
}));