我遇到了 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/