加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 为什么我收到错误…意外的请求:GET/internalapi/q

发布时间:2020-12-17 08:59:52 所属栏目:安全 来源:网络整理
导读:我在我的角度应用程序中定义了以下服务: services.factory('MyService',['Restangular',function (Restangular) { return { events : { loading : true },retrieveQuotes : function() { return Restangular.all('quotes').getList().then(function() { ret
我在我的角度应用程序中定义了以下服务:
services.factory('MyService',['Restangular',function (Restangular) {
       return {
           events : { loading : true },retrieveQuotes : function() {
               return Restangular.all('quotes').getList().then(function() {
                   return { hello: 'World' };
               });
           }
    };
}]);

我写下面的规范来测试它:

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

});

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

错误:意外请求:GET / internalapi / quotes

我究竟做错了什么?

编辑:

原来我配置Restangular像这样… RestangularProvider.setBaseUrl(“/ internalapi”);.但我是伪造调用internalapi / quotes。注意缺少“/”。一旦我添加了斜杠/ 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",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()这种方式我不必定义每个测试中的响应。

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

        ms.retrieveQuotes();
        $httpBackend.flush();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读