为什么我收到错误…意外的请求: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'})
祝你好运