gpt4 book ai didi

node.js - 使用“zombie.js”加载 jQuery 页面时“超出了最大调用堆栈大小”

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:34 25 4
gpt4 key购买 nike

在大约 4 天的时间里,我在 Node.js 项目上的大部分功能测试套件都失败了,无论是在 Linux 上的 CI 还是本地 OS X 上。我不认为这是由于我的代码库发生任何更改,因为我可以回滚到 git 存储库的早期状态,并看到以前通过的测试现在也同样失败了。它在不同平台上失败的事实让我认为这不太可能是一个特别本地的环境变化。

我怀疑这可能是依赖树中某个地方的问题,并且最有可能是在zombie.js使用的包之一中,因为我的应用程序似乎仍然工作正常。但是,我没有记录上次测试时树中所有包的版本。

我已简化为以下测试用例:

so_test.js

"use strict";

var zombie = require('zombie');
var browser = zombie.create({ debug: true });
var assert = require('assert');

describe('Stack Overflow', function() {
it('should be alive', function(done) {
browser.visit('http://stackoverflow.com/')
.then(function() {
browser.dump();

assert.equal(browser.location.pathname, '/', 'It is not the SO home page.');
assert.ok(browser.success, 'It did not load successfully.');
})
.then(done, done);
});
});

这对我来说失败如下:

$ mocha -R spec test/functional/stack_overflow.js 


Stack Overflow
Zombie: Opened window http://stackoverflow.com/
Zombie: GET http://stackoverflow.com/ => 200
Zombie: Loaded document http://stackoverflow.com/
Zombie: GET http://cdn.sstatic.net/Js/stub.en.js?v=26cc3a09b135 => 200
Zombie: GET http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js => 200
Maximum call stack size exceeded undefined
$ is not defined ReferenceError: $ is not defined
at <anonymous>:1:8168
at Contextify.sandbox.run (/Users/nanoamp/src/p/node_modules/zombie/node_modules/jsdom/node_modules/contextify/lib/contextify.js:12:24)
at DOMWindow.window._evaluate (/Users/nanoamp/src/p/node_modules/zombie/lib/zombie/window.js:188:25)
at Object.HTML.languageProcessors.javascript (/Users/nanoamp/src/p/node_modules/zombie/lib/zombie/scripts.js:23:21)
at define.proto._eval (/Users/nanoamp/src/p/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:1480:47)
at loaded (/Users/nanoamp/src/p/node_modules/zombie/lib/zombie/scripts.js:74:23)
at /Users/nanoamp/src/p/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:76:20
at Object.item.check (/Users/nanoamp/src/p/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:345:11)
at Object.item.check (/Users/nanoamp/src/p/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:348:23)
at /Users/nanoamp/src/p/node_modules/zombie/node_modules/jsdom/lib/jsdom/level2/html.js:363:12

... similar deleted for brevity ...

Zombie: Event loop is empty
1) should be alive


0 passing (2s)
1 failing

1) Stack Overflow should be alive:
Maximum call stack size exceeded

如果我将 URL 更改为 www.google.com (不使用 jQuery),它就会通过。如果我将 zombie .js 更改为 2.0.0-alpha31(之前可以工作)和 2.0.4 之间的另一个版本,则没有区别。在我的原始代码中,我可以在 1.7 和 1.11 之间自由更改加载的 jQuery 版本,而不会带来任何好处。虽然 jQuery 似乎是一个触发器,但我不知道它是否是该库特有的,或者只是它与 DOM 紧密相连这一事实。

我还将测试用例放在 Runnable 上:http://runnable.com/VDf4OLzyU64cSSuz/zombie-js-test-loading-page-with-jquery-for-node-js-and-mocha (尽管在撰写本文时似乎有点不稳定)。

任何人都可以建议如何解决这个问题,或者如果失败,如何更好地调查?

最佳答案

它现在可以与 zombie 2.0.7 一起正常工作。

我终于成功地从日志中检索了我以前的工作版本的依赖关系树,这使我能够追踪问题的具体根源:

zombie@2.0.0-alpha31 <-- last working version
- jsdom@0.8.11
-- cssstyle@0.2.14

zombie@2.0.0-alpha31 <-- unchanged top-level package.json
- jsdom@0.8.11 routine `npm install` must've updated deeper cssstyle
-- cssstyle@0.2.18

zombie 2.0.4 <-- tried updating zombie, still failing
- jsdom@1.0.0-pre.7
-- cssstyle@0.2.18
-- parse5@1.0.1

zombie 2.0.7 <-- working today
- jsdom@1.0.2
-- cssstyle@0.2.18
-- cssstyle-browserify@0.2.7
-- parse5@1.1.4

如果我重新创建了确切的初始工作包树并执行了操作:

cd node_modules/zombie/node_modules/jsdom && npm install cssstyle@0.2.18

然后它就会停止工作。因此,我将问题归因于 zombie .js 的 jsdom 依赖项的 cssstyle 依赖项中引入的不兼容性。 Node.js 模块模式将我们从依赖 hell 中拯救出来就到此为止了:)

关于node.js - 使用“zombie.js”加载 jQuery 页面时“超出了最大调用堆栈大小”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26302977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com