使用量角器运行测试时调用其他API
我目前已使用量角器进行了一些测试。这些测试正在从WebApi检索数据。但是,我想将WebApi调用指向一个真实但经过模拟的WebApi,该WebApi仅返回要用作测试数据的对象。
例如,当前请求是:
http://localhost/myApp/api/profile/getUser/1
我想操纵此请求,因此测试将使用:
http://localhost/myApp/apiMock/profile/getUser/1
首先,我想编写一个可以更改请求标头的拦截器,但是我不知道如何使它与Protractor一起工作。我不能在量角器测试中直接使用角度,可以吗?如果可以的话,编写拦截器不是问题,我只是不知道如何将其插入量角器进行测试。
我已阅读以下文章:端到端和模拟,但是它不能满足我的需求,因为我不想一遍又一遍地调用同一网址,我想替换动态网址(的一部分)以指向模拟的api服务。
为了使自己更清楚,我不是在客户端上寻找模拟数据。我想保留API调用(我认为这是更多的E2E),但仅指向另一个返回模拟数据的API URL。
-
这个问题可以通过添加一个来解决
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