【问题标题】:Prevent zombie.js from loading only external resources防止zombie.js 只加载外部资源
【发布时间】:2013-03-12 21:45:54
【问题描述】:

我在测试期间使用zombie.js 从本地快速服务器加载页面。不幸的是,有一个脚本元素调用了 Google Analytics。如果可能,我想(优雅地)阻止这个外部脚本,而不阻止其他(本地)脚本加载。

我知道{ runScripts : false } 可以通过调用browser.visit() 获得。但是,这拒绝加载页面上的任何和所有脚本,而不仅仅是那些生活在其他主机上的脚本。这可能吗?

【问题讨论】:

    标签: javascript testing express zombie.js


    【解决方案1】:

    自从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()
    

    【讨论】:

      【解决方案2】:

      您应该使用resources 对象。

      如果您不希望请求实际通过,您可以设置某些请求以给出特定响应。您将执行以下操作以使 google 分析返回一个空文档:

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

      请注意,您必须提供要模拟的确切 URL,无法模拟部分 URL,例如域名。

      【讨论】:

      【解决方案3】:

      也许这样的东西对你有用?它遍历所有资源并“中止”那些应该被忽略的资源。

      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 });
        }
      });
      

      【讨论】:

        猜你喜欢
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多