我遇到Zombie.js抛出错误Error: Timeout: did not get to load all resources on this page
的问题。
它总是超级随机,似乎总是在不同的测试中发生。
我曾经使用以下代码来防止此问题。
Browser.waitDuration = '60s';
最近出现问题Stripe.js造成了这个问题,我的单元测试需要额外55秒。请参阅this question。
所以Stripe建议我删除该行。当然,我的测试开始再次运行得更快。
但我忘记了我添加了该行以防止此超时错误。
如何解决这个问题,同时确保我的单元测试不会花费不合理的长时间?
答案 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文件的位置(通常,应用程序的根目录。)