Angularjs 使用量角器运行测试时调用其他api
我目前已经使用量角器设置了一些测试。这些测试正在从WebApi检索数据。但是,我想将WebApi调用指向一个真实但模拟的WebApi,它只返回我想用作测试数据的对象 例如,当前请求是:Angularjs 使用量角器运行测试时调用其他api,angularjs,protractor,angularjs-e2e,Angularjs,Protractor,Angularjs E2e,我目前已经使用量角器设置了一些测试。这些测试正在从WebApi检索数据。但是,我想将WebApi调用指向一个真实但模拟的WebApi,它只返回我想用作测试数据的对象 例如,当前请求是: http://localhost/myApp/api/profile/getUser/1 我想操纵此请求,以便测试将使用: http://localhost/myApp/apiMock/profile/getUser/1 首先,我想编写一个拦截器来更改请求头,但我不知道如何使用这个拦截器。我不能在量角器测试中
http://localhost/myApp/api/profile/getUser/1
我想操纵此请求,以便测试将使用:
http://localhost/myApp/apiMock/profile/getUser/1
首先,我想编写一个拦截器来更改请求头,但我不知道如何使用这个拦截器。我不能在量角器测试中直接使用角度,对吗?如果可以,编写拦截器不是问题,我只是不知道如何在量角器中插入它进行测试
我读过以下文章:但它不能满足我的需求,因为我不想一遍又一遍地调用同一个url,我想替换(部分)动态url以指向模拟api服务
为了让我自己更清楚,我不是在客户端寻找模拟数据。我想保留API调用(我认为它更像E2E),但只需指向另一个返回模拟数据的API url。通过添加
addMockModule
详情如下:
解决方案:
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在代码中定义了api url?每个控制器都有自己的服务来处理http调用。在服务内部有一个包含基址('api/profile/')的变量。函数本身(我们在其中调用$http)向url参数添加正确的操作(APIRL+'getuser/'+userid)。基址('api')可以使用
angular.constant
定义,然后注入到您的服务中。在量角器测试中,用模拟地址(“apiMock”)替换基址。谢谢,事实上,这与拦截API调用类似。但是如何改变量角器中的常数呢?每当我调用angular时,它都会说“angular未定义”,您应该使用ptor.addMockModule
。