javascript - Zombie.js错误: Timeout: did not get to load all resources on this page

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

我遇到了 Zombie.js 抛出错误错误:超时:无法加载此页面上的所有资源的问题。

它总是 super 随机,并且似乎总是在不同的测试中发生。

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

Browser.waitDuration = '60s';

问题是最近 Stripe.js 导致了这个问题,我的单元测试多花了 55 秒。请参阅this question .

所以 Stripe 建议我删除该行。果然我的测试又开始运行得更快了。

但我忘记了我添加该行是为了防止出现此超时错误。

关于如何解决这个问题,同时确保我的单元测试不会花费不合理的长时间,有什么想法吗?

最佳答案

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

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

Prevent zombie.js from loading only external resources

提供了两个答案。第一个——选择的答案——涉及 3.1 之前的 zombie .js,第二个(非选择的答案)解释了如何使用“nock”npm 模块来 stub 外部资源。

抱歉,我没有时间计算任何示例。不过,我确实有一个要点,其中有一个在 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 文件应该存在于与入口点相同的本地目录中 - 如果您遵循 Node 约定,那么它将是您的 app.js 或 index.js 文件所在的位置(通常是应用程序的根目录)。

关于javascript - Zombie.js错误: Timeout: did not get to load all resources on this page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44125799/

相关文章:

javascript - 无法从 GMap v3 隐藏标记

javascript - 如何使用 Amazon S3 listObjects 过滤 .mp3 文件

node.js - Node Multer 意外字段

c# - 如何将对象序列化为 C# 对象初始化代码?

java - AssertEquals 2 列表忽略顺序

reactjs - React Jest Enzyme - 无法通过简单的按钮点击测试

javascript - 如何停止订阅商店更新?

javascript - 在 a-frame 和 React.js 中播放和暂停视频

javascript - Nodejs - 使用 'private key' 编码为 Base64 并且只能在服务器中解码

javascript - node.js 中是否存在超时事件的通用机制?