2014-10-10 43 views
1

大約4天后,我的大多數node.js項目的功能測試套件都失敗了,無論是在Linux上的CI還是在OS X上的本地上。不要認爲這是由於我的代碼庫有任何變化,因爲我可以回滾到git repo的早期狀態,並且看到過去通過的測試現在都失敗了。它在不同平臺上失敗的事實使我認爲這不太可能成爲特別的本地環境變化。'超過最大調用堆棧大小'使用zombie.js加載jQuery頁面

我懷疑這很可能是一個問題某處的依賴關係樹,並最有可能在通過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); 
    }); 
}); 

其失敗對我來說,如下所示:如果我更改URL,以

$ 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 

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(雖然在寫作的時候看起來有點片面)。

任何人都可以建議如何解決這個或失敗,如何更好地調查?

回答

2

它現在可以與殭屍2.0.7正常工作。

我終於成功地從原木我以前的工作版本,這讓我跟蹤問題的具體來源獲取的依賴關係樹:如果我重新創建確切的初始工作包

[email protected] <-- last working version 
- [email protected] 
-- [email protected] 

[email protected] <-- unchanged top-level package.json 
- [email protected]   routine `npm install` must've updated deeper cssstyle 
-- [email protected] 

zombie 2.0.4   <-- tried updating zombie, still failing 
- [email protected] 
-- [email protected] 
-- [email protected] 

zombie 2.0.7   <-- working today 
- [email protected] 
-- [email protected] 
-- [email protected] 
-- [email protected] 

樹並且做了:

cd node_modules/zombie/node_modules/jsdom && npm install [email protected] 

那麼它就會停止工作。因此,我將該問題歸因於zombie.js的jsdom依賴關係的cssstyle依賴中引入的不兼容性。爲node.js模塊模式節省了大量的時間,從而避免了依賴地獄:)

相關問題