我目前使用量角器设置了一些测试。这些测试是从WebApi检索数据。但是,我想将WebApi调用指向一个真实但被模拟的WebApi,它只返回我想用作测试数据的对象。
例如,当前请求是:
http://localhost/myApp/api/profile/getUser/1
我想操纵这个请求,所以测试将使用:
http://localhost/myApp/apiMock/profile/getUser/1
首先,我想写一个更改请求标题的拦截器,但我不知道如何使用Protractor进行此操作。我不能在量角器测试中直接使用角度,是吗?如果可以的话,编写拦截器并不是一个问题,我只是不知道如何插入它以进行量角器中的测试。
我已阅读以下帖子:E2E and Mocking但它并不能满足我的需求,因为我不想一遍又一遍地调用相同的网址,我想要更换(动态网址的一部分)指向模拟的api服务。
为了让自己更清楚,我不是在客户端寻找模拟数据。我希望保留API调用(在我看来它更多的是E2E),但只是指向另一个返回模拟数据的API网址。
答案 0 :(得分:1)
可以通过添加addMockModule
更多详细信息:Protractor addMockModule and $httpProvider interceptor
溶液:
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