使用量角器运行测试时调用其他API

发布于 2021-02-01 10:14:09

我目前已使用量角器进行了一些测试。这些测试正在从WebApi检索数据。但是,我想将WebApi调用指向一个真实但经过模拟的WebApi,该WebApi仅返回要用作测试数据的对象。

例如,当前请求是:

http://localhost/myApp/api/profile/getUser/1

我想操纵此请求,因此测试将使用:

http://localhost/myApp/apiMock/profile/getUser/1

首先,我想编写一个可以更改请求标头的拦截器,但是我不知道如何使它与Protractor一起工作。我不能在量角器测试中直接使用角度,可以吗?如果可以的话,编写拦截器不是问题,我只是不知道如何将其插入量角器进行测试。

我已阅读以下文章:端到端和模拟,但是它不能满足我的需求,因为我不想一遍又一遍地调用同一网址,我想替换动态网址(的一部分)以指向模拟的api服务。

为了使自己更清楚,我不是在客户端上寻找模拟数据。我想保留API调用(我认为这是更多的E2E),但仅指向另一个返回模拟数据的API URL。

关注者
0
被浏览
63
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    这个问题可以通过添加一个来解决 addMockModule

    此处有更多详细信息:量角器addMockModule和$httpProvider拦截器

    解:

    exports.apiMockModule = function () {
    
      console.log('apiMockModule executing');
    
      var serviceId = 'mockedApiInterceptor';
      angular.module('apiMockModule', [])
          .config(['$httpProvider', configApiMock])
          .factory(serviceId,
          [mockedApiInterceptor]);
    
      function mockedApiInterceptor() {
          return {
              request: function (config) {
                  console.log('apiMockModule intercepted');
                  if ((config.url.indexOf('api')) > -1) {
                    config.url = config.url.replace('api/', 'apiMock/');
                  }
    
                  return config;
              },
              response: function (response) {
                  return response
              }
          };
      }
    
      function configApiMock($httpProvider) {
          $httpProvider.interceptors.push('mockedApiInterceptor');
      }
    };
    

    然后进行加载模块的实际测试。

    describe('E2E addMockModule', function() {
        beforeEach(function() {
            var mockModule = require('./mockedRest');
            browser.addMockModule('apiMockModule', mockModule.apiMockModule);
            console.log('apiMockModule loaded');
            browser.get('#page');
        });
        it('tests the new apiMock', function() { 
            // your test that clicks a button that performs a rest api call. 
        });
    });
    

    学分到@gontard



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看