Запретить загрузку zombie.js только внешних ресурсов

Я использую zombie.js для загрузки страницы с локального экспресс-сервера во время теста. К сожалению, есть элемент скрипта, который вызывает Google Analytics. Я хотел бы заблокировать этот внешний сценарий (изящно), не препятствуя загрузке других (локальных) сценариев, если это возможно.

я знаю это { runScripts : false } доступен со звонками на browser.visit(), Однако это отказывается загружать все скрипты на странице, а не только те, которые живут на других хостах. Это возможно?

3 ответа

Решение

Вы должны использовать объект ресурсов.

Вы можете установить определенные запросы, чтобы дать конкретные ответы, если вы не хотите, чтобы запрос фактически прошел. Вы бы сделали следующее, чтобы Google Analytics вернул пустой документ:

browser.resources.mock('http://google.com/url/to/analytics.js',{});

Обратите внимание, что вы должны предоставить точный URL-адрес, который вы хотите смоделировать, нет способа смоделировать частичный URL-адрес, такой как доменное имя.

Начиная с зомби 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()

Может быть, что-то подобное подойдет вам? Он перебирает все ресурсы и "прерывает" те, которые следует игнорировать.

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 });
  }
});
Другие вопросы по тегам