为什么我收到错误…意外的请求:GET / internalapi /报价

我已经在我的angular应用程序中定义了以下服务:

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

我正在写下面的规范来testing它:

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

每当我运行testing,第一个testing通过,但第二个testing产生的错误:

Error: Unexpected request: GET /internalapi/quotes

我究竟做错了什么?

编辑:

原来,我configurationRestangular像这样… RestangularProvider.setBaseUrl("/internalapi"); 。 但是我伪造了internalapi/quotes通话的internalapi/quotes 。 注意缺less“/”。 一旦我添加斜杠/internalapi/quotes都很好:)

你需要告诉$ httpBackend来期待一个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(); })); }); 

或者你可以把你的respond()放在你的expectGET() 。 我更喜欢把whenGET()语句放在beforeEach() ,这样我就不必在每个testing中定义响应。

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

我和你们有同样的问题 我的解决scheme是在.expectGET的URL参数的开头添加一个“/”。 用你的例子:

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

祝你好运