为什么我收到错误...意外请求:GET/internalapi/quotes

Sim*_*max 55 angularjs restangular

我在我的角应用中定义了以下服务:

services.factory('MyService', ['Restangular', function (Restangular) {
       return {
           events : { loading : true },

           retrieveQuotes : function() {
               return Restangular.all('quotes').getList().then(function() {
                   return { hello: 'World' };
               });
           }
    };
}]);
Run Code Online (Sandbox Code Playgroud)

我正在编写以下规范来测试它:

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

});
Run Code Online (Sandbox Code Playgroud)

每当我运行测试时,第一个测试通过,但第二个测试产生错误:

Error: Unexpected request: GET /internalapi/quotes

我究竟做错了什么?

编辑:

原来,我已经配置Restangular是这样的... RestangularProvider.setBaseUrl("/internalapi");.但我正在打电话给internalapi/quotes.注意缺少"/".一旦我添加斜线/internalapi/quotes一切都很好:)

Jon*_*mbo 56

您需要告诉$ 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();
    }));

});
Run Code Online (Sandbox Code Playgroud)

或者你可以把你respond()expectGET().我更喜欢以我的方式表达我的whenGET()声明,beforeEach()我不必在每个测试中定义响应.

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

        ms.retrieveQuotes();
        $httpBackend.flush(); 
Run Code Online (Sandbox Code Playgroud)

  • 亲爱的,我觉得很蠢.我现在已经解决了,很简单.我已经配置了```Restangular```,因此```RestangularProvider.setBaseUrl("/ internalapi");```并期望调用```internalapi/quotes```.注意丢失的斜杠.我的错.谢谢你的帮助. (4认同)
  • 不幸的是,即使我添加```$ httpBackend.expectGET("internalapi/quotes");```,我也会得到同样的错误.还有其他想法吗? (3认同)

gro*_*eck 17

我和你们有同样的问题.我的解决方案是在.expectGET的URL参数的开头添加一个'/'.使用你的例子:

$httpBackend.expectGET("/internalapi/quotes").respond({ hello: 'world'})
Run Code Online (Sandbox Code Playgroud)

祝你好运