Zombie.js错误:超时:没有加载此页面上的所有资源

时间:2017-05-23 04:27:08

标签: javascript node.js unit-testing mocha zombie.js

我遇到Zombie.js抛出错误Error: Timeout: did not get to load all resources on this page的问题。

它总是超级随机,似乎总是在不同的测试中发生。

我曾经使用以下代码来防止此问题。

Browser.waitDuration = '60s';

最近出现问题Stripe.js造成了这个问题,我的单元测试需要额外55秒。请参阅this question

所以Stripe建议我删除该行。当然,我的测试开始再次运行得更快。

但我忘记了我添加了该行以防止此超时错误。

如何解决这个问题,同时确保我的单元测试不会花费不合理的长时间?

1 个答案:

答案 0 :(得分:1)

我从未使用过Zombie.JS,但我使用了PhantomJS,我遇到了类似的问题。我的解决方案是阻止不必要的资源,这些资源在测试期间将我的请求/响应时间减少到毫秒 - 大部分时间。

在另一个与zombie.js相关的问题中有一个讨论,其中OP希望阻止外部资源,如Google Analytics:

Prevent zombie.js from loading only external resources

提供了两个答案。一个 - 选择的答案 - 属于3.1之前的zombie.js,第二个(未选择的答案)解释了如何使用'nock'npm模块来存根外部资源。

抱歉,我没有时间研究任何例子。但是,我确实有一个关于在PhantomJS中阻止资源的例子的要点:https://gist.github.com/mootzville/15af584e626b365d2664

也许这可以给你一些想法。

祝你好运。

编辑(2017年6月3日):

我玩了你在评论中提供的代码。下面是一些代码的示例,这些代码应该适用于您使用zombie和nock:

nock('https://js.stripe.com')
  .get('/v2')
  .replyWithFile(200, __dirname + '/stripev2.js');

var Browser = require('zombie');
var browser = new Browser();
var url = 'https://js.stripe.com/v2';


browser.fetch(url)
  .then(function(response) {
    console.log('Status code:', response.status);
    if (response.status === 200)
      return response.text();
  })
  .then(function(text) {
    console.log('Document:', text);
  })
  .catch(function(error) {
    console.log('Network error');
  });

为了澄清一下,stripev2.js文件应该存在于与入口点相同的目录中 - 如果您遵循节点约定,那么它将是您的app.js或index.js文件的位置(通常,应用程序的根目录。)