Zombie.js错误:超时:没有得到加载在这个页面上的所有资源

我有一个问题,其中Zombie.js抛出一个错误Error: Timeout: did not get to load all resources on this page

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

我曾经有以下的代码行来防止这个问题。

 Browser.waitDuration = '60s'; 

问题是最近Stripe.js导致这个问题,我的unit testing花了额外的55秒。 看到这个问题 。

所以Stripebuild议我删除该行。 当然,我的testing开始再次运行得更快。

但是我已经忘记了我添加了这一行来防止这个超时错误。

任何想法如何解决这个问题,同时确保我的unit testing不会花费过长的时间?

我从来没有用过Zombie.JS,但是我用了很多PhantomJS,而且遇到了类似的问题。 我的解决scheme是阻止不必要的资源,在testing过程中,我的请求/响应时间减less到几乎毫秒。

在另一个与zombie.js有关的问题中,OP想要阻止外部资源,如Google Analytics:

防止zombie.js只加载外部资源

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

对不起,但我没有时间找出任何例子。 不过,我有一个在PhantomJS中封锁资源的例子: https ://gist.github.com/mootzville/15af584e626b365d2664

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

祝你好运。

编辑(2017年6月3日):

我玩了你在评论中提供的代码。 下面是一些代码应该为你使用僵尸和诺克一起工作的示例:

 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文件的位置(通常是根目录的应用程序)。