Angularjs 量角器addMockModule和$httpProvider拦截器
这个问题是我的另一个问题的可能解决方案(他们建议使用量角器中的Angularjs 量角器addMockModule和$httpProvider拦截器,angularjs,protractor,angularjs-e2e,Angularjs,Protractor,Angularjs E2e,这个问题是我的另一个问题的可能解决方案(他们建议使用量角器中的addMockModule): 我有以下文件:mockedRest.js这是我想添加到量角器的模块。它应该拦截任何REST调用并替换地址(api/to-apiMock/) 然后我有我的实际测试,我加载模块 describe('E2E addMockModule', function() { beforeEach(function() { var mockModule = require('./mockedRes
addMockModule
):
我有以下文件:mockedRest.js
这是我想添加到量角器的模块。它应该拦截任何REST调用并替换地址(api/to-apiMock/)
然后我有我的实际测试,我加载模块
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() {
// test that clicks a button that performs a rest api call. left out as I can see the call in fiddler.
});
});
但是,REST调用仍然指向“api/”而不是“apiMock/”
我不知道我是否需要做更多的事情来让拦截器完成它的工作。
还值得注意的是,apiMockModule内部没有任何登录到console的内容,就像它没有加载模块一样
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() {
// test that clicks a button that performs a rest api call. left out as I can see the call in fiddler.
});
});
非常感谢您的建议。我在模拟模块中做了两个小错误修复,以使其正常工作
- 模拟模块不需要依赖于您的应用程序
- config.url必须由转换后的设置
mockedRest.js
:
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');
}
};
我已在此环境中测试了此代码:
- 量角器0.24.1
- 角度1.2.16
- ChromeDriver 2.10.267517
- 谷歌浏览器35.0.1916.153
- Mac OS X 10.9.3 x86_64
你写道: APIMock模块内没有任何记录到控制台的内容 这是正常的,模块代码不是由量角器执行的,而是发送到浏览器(使用)。因此,代码由浏览器执行 但是,可以为调试设置以下选项:
...
it('tests the new apiMock', function() {
browser.manage().logs().get('browser').then(function(browserLog) {
console.log('log: ' + require('util').inspect(browserLog));
});
...
感谢您的澄清和错误修复,但它仍然不起作用。有没有其他方法可以调试这个?即使我设置config.url='something',它也没有使用该值,我已经完成了我的答案。我已经标记为答案。我的代码可能有问题,但我找不到。拦截器永远不会发射。您是否仍将测试代码作为一个小应用程序?你用什么型号的量角器?非常感谢你的努力和帮助!没问题,我想让你解决你的问题。我仍然有这个测试代码,但我的应用程序(不是很小)…我在测试环境中完成我的答案。