我在测试期间使用zombie.js从本地Express服务器加载页面。不幸的是,有一个脚本元素可以调用Google Analytics。我想阻止这个外部脚本(优雅地),如果可能的话,不要阻止加载其他(本地)脚本。
我知道调用{ runScripts : false }
时可以使用browser.visit()
。但是,拒绝加载页面上的任何和所有脚本,而不仅仅是那些生活在其他主机上的脚本。这可能吗?
答案 0 :(得分:8)
自zombie 3.1以来,browser.resources.mock
方法消失了。另一种方法是使用nock
库:
var nock = require('nock')
nock('http://www.google-analytics.com')
.get('/analytics.js')
.times(Math.Infinity)
.reply(200, '{}')
var Browser = require('zombie')
var browser = new Browser()
答案 1 :(得分:7)
您应该使用resources对象。
如果您不希望请求实际通过,您可以设置某些请求以提供特定响应。您将执行以下操作以使Google Analytics分析返回空文档:
browser.resources.mock('http://google.com/url/to/analytics.js',{});
请注意,您必须提供要模拟的确切网址,无法模拟部分网址,例如域名。
答案 2 :(得分:1)
这样的事情对你有用吗?它遍历所有资源并“中止”应该被忽略的资源。
const Fetch = require('zombie/lib/fetch');
const ignoredResources = [
'google-analytics.com'
];
browser.pipeline.addHandler((browser, request) => {
let doAbort = false;
ignoredResources.forEach(domain => {
if (request.url.includes(domain)) {
doAbort = true;
}
});
if (doAbort) {
return new Fetch.Response('', { status: 200 });
}
});