Por que recebo erro… solicitação inesperada: GET / internalapi / quotes

Eu defini o seguinte serviço no meu aplicativo angular:

services.factory('MyService', ['Restangular', function (Restangular) { return { events : { loading : true }, retrieveQuotes : function() { return Restangular.all('quotes').getList().then(function() { return { hello: 'World' }; }); } }; }]); 

e estou escrevendo a seguinte especificação para testá-lo:

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

Sempre que eu executo os testes, o primeiro teste passa, mas o segundo teste produz o erro:

Error: Unexpected request: GET /internalapi/quotes

O que estou fazendo de errado?

EDITAR:

Descobri que eu tinha configurado o Restangular assim … RestangularProvider.setBaseUrl("/internalapi"); . Mas eu estava fingindo chamadas para internalapi/quotes . Observe a falta do “/”. Depois que eu adicionei o slash /internalapi/quotes tudo foi bom 🙂

Você precisa informar ao $ httpBackend para esperar uma solicitação 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, você pode colocar sua respond() em sua expectGET() . Eu prefiro colocar minhas whenGET() em um beforeEach() dessa forma eu não tenho que definir a resposta dentro de cada teste.

  //expect a get request to "internalapi/quotes" $httpBackend.expectGET("internalapi/quotes").respond({ hello: 'World' }); ms.retrieveQuotes(); $httpBackend.flush(); 

Eu tive o mesmo problema que vocês. Minha solução foi adicionar um ‘/’ no início do parâmetro URL do .expectGET. Usando seu exemplo:

 $httpBackend.expectGET("/internalapi/quotes").respond({ hello: 'world'}) 

Melhor sorte