2014-06-09 65 views
34

我試圖從步兵與 http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/噶/茉莉花超時而不運行測試

噶生成的項目運行噶/茉莉推出PhantomJS(或Chrome),並根據singleRun,其超時或者只是坐在那裏,什麼都不做。我試着改變captureTimeoutbrowserNoActivityTimeout,基於來自具有類似問題的人的閱讀解決方案,但似乎並不奏效。

我有關pacakge版本等:

  • 的NodeJS:0.10.25
  • 噶:0.12.16
  • 的WebPack:1.1.11
  • 的WebPack-dev的服務器:1.4.1
  • 卡瑪 - 茉莉:0.1.5
  • Linux操作系統:Ubuntu的14.04

我在OS X上發現someone with the same problem

我試過更新我所有的開發依賴到最新版本,但問題仍然存在。

我的控制檯輸出如下。引用包的webpack行現在有效/無效令人擔憂,但我無法找到任何有關它們的含義的信息。下面是我的控制檯輸出:

Running "karma:unit" (karma) task 
DEBUG [config]: autoWatch set to false, because of singleRun 
DEBUG [plugin]: Loading karma-* from /home/ed/workspace/wwb-app/node_modules 
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-chrome-launcher. 
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-coffee-preprocessor. 
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-firefox-launcher. 
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-html2js-preprocessor. 
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-jasmine. 
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-phantomjs-launcher. 
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-requirejs. 
DEBUG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-script-launcher. 
DEBG [plugin]: Loading plugin /home/ed/workspace/wwb-app/node_modules/karma-webpack-plugin. 
INFO [karma]: Karma v0.12.16 server started at http://localhost:8080/ 
INFO [launcher]: Starting browser PhantomJS 
DEBUG [temp-dir]: Creating temp dir at /tmp/karma-98204612 
DEBUG [launcher]: /home/ed/workspace/wwb-app/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs /tmp/karma-98204612/capture.js 
Hash: 89285186567c1bc5bb7f 
Version: webpack 1.1.11 
Time: 2ms 
Asset Size Chunks  Chunk Names 
webpack: bundle is now VALID. 
webpack: bundle is now INVALID. 
DEBUG [web-server]: serving: /home/ed/workspace/wwb-app/node_modules/karma/static/client.html 
DEBUG [web-server]: serving: /home/ed/workspace/wwb-app/node_modules/karma/static/karma.js 
DEBUG [web-server]: upgrade /socket.io/1/websocket/CjC8pnQq5It2z_kWYB98 
DEBUG [karma]: A browser has connected on socket CjC8pnQq5It2z_kWYB98 
INFO [PhantomJS 1.9.7 (Linux)]: Connected on socket CjC8pnQq5It2z_kWYB98 with id 98204612 
DEBUG [launcher]: PhantomJS (id 98204612) captured in 1.704 secs 
WARN [PhantomJS 1.9.7 (Linux)]: Disconnected (1 times), because no message in 30000 ms. 

DEBUG [karma]: Run complete, exitting. 
DEBUG [launcher]: Disconnecting all browsers 
DEBUG [launcher]: Process PhantomJS exited with code 0 
DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-98204612 
Warning: Task "karma:unit" failed. Use --force to continue. 

Aborted due to warnings. 

這是我karma.conf.js文件:

'use strict'; 

module.exports = function (config) { 
config.set({ 
    basePath: '', 
    frameworks: ['jasmine'], 
    files: [ 
     'test/helpers/**/*.js', 
     'test/spec/components/**/*.js' 
    ], 
    preprocessors: { 
     'test/spec/components/**/*.js': ['webpack'] 
    }, 
    webpack: { 
     cache: true, 
     module: { 
      loaders: [{ 
       test: /\.css$/, 
       loader: 'style!css' 
      }, { 
       test: /\.gif/, 
       loader: 'url-loader?limit=10000&minetype=image/gif' 
      }, { 
       test: /\.jpg/, 
       loader: 'url-loader?limit=10000&minetype=image/jpg' 
      }, { 
       test: /\.png/, 
       loader: 'url-loader?limit=10000&minetype=image/png' 
      }, { 
       test: /\.js$/, 
       loader: 'jsx-loader' 
      }] 
     } 
    }, 
    webpackServer: { 
     stats: { 
      colors: true 
     } 
    }, 
    exclude: [], 
    port: 8080, 
    logLevel: config.LOG_DEBUG, 
    colors: true, 
    autoWatch: true, 
    // Start these browsers, currently available: 
    // - Chrome 
    // - ChromeCanary 
    // - Firefox 
    // - Opera 
    // - Safari (only Mac) 
    // - PhantomJS 
    // - IE (only Windows) 
    browsers: ['PhantomJS'], 
    reporters: ['progress'], 
    captureTimeout: 60000, 
    browserNoActivityTimeout: 60000, 
    singleRun: true 
}); 
}; 

回答

1

我解決了這個爲我自己的環境。我在全局安裝了一堆nodejs軟件包。我沒有做出迴歸來確切地找出問題所在,但我強烈懷疑是因爲全球安裝了業力是原因。

如果你有那麼這個問題的嘗試

sudo npm -g remove karma 

,如果不工作,那麼我會刪除所有的全球節點程序包(除了像自耕農,咕嚕-CLI真正的全球性套餐爲例)。然後在本地爲您的項目安裝。

我還注意到,當你在OS X上運行sudo npm -i,它改變〜/ .npm和隨後npm -i命令的所有者將失敗並EACCESS錯誤,。

38

我有同樣的問題。從相關的GitHub Issue,我瞭解到您可以延長不活動超時時間。

設置您gruntfile或業力的配置文件這噶配置選項:

browserNoActivityTimeout: 100000 

我將它設置爲100秒和我的測試運行成功。我不知道是什麼原因造成延誤。

+1

我試着玩超時沒有成功。在全球安裝業力時沒有任何工作 – edoloughlin

+6

在webpack-karma的引擎下使用的'webpack-dev-middleware'僅在瀏覽器請求文件後編譯資產。因此,*在瀏覽器加載了karma測試頁面之後,開始編譯,只有在這之後瀏覽器纔會響應Karma。生產編譯需要30〜45秒才能完成。 –

15

我們在構建服務器上遇到類似問題。

增加browserNoActivityTimeout工作到一個點。我們將其提高到60000ms,但隨着單元測試次數的增加,幻像JS不斷開的問題得以恢復。

我們最終跟蹤問題下來提供給phantomJS的RAM。我們有1100個單元測試需要大約1分30秒的時間才能運行,但是在60000ms的超時時間內,phantomJS將無法斷開連接。

構建節點虛擬機內存從2GB提高至4GB和1100次單元測試,然後把〜45S運行和phantomJS將與〜5秒斷開。巨大的進步。

有兩個教訓:1。 是PhantomJS內存餓了,所以一定要確保它有足夠的內存,它的事 2.簡介您的代碼,以瞭解在那裏你可以與內存的使用更有效率。

+0

看來你可以使用'browserNoActivityTimeout:0',這似乎使它等待更長時間。在這一點上,Karma會永遠等待還是有限制?這在'karma-runner.github.io'上沒有很好的記錄,谷歌也沒有幫助其他地方。 – trysis

+12

PhantomJS的RAM在哪裏(如何設置)? – Nick

+0

https://xkcd.com/979/。 @Gareth你是怎麼做的? – Dylanthepiguy

6

另一個可能的解釋是RequireJS阻礙。如果我將'requirejs'添加到config.frameworks數組中的karma.conf.js中,我會得到這個確切的錯誤。 這似乎覆蓋本機require功能,並導致測試不執行。在我的情況下,描述塊被觸發了,但是如果它是塊的話。

+0

原來這也是我的問題。謝謝! – lje

21

我改噶配置,以

captureTimeout: 60000, // it was already there 
browserDisconnectTimeout : 10000, 
browserDisconnectTolerance : 1, 
browserNoActivityTimeout : 60000,//by default 10000 

我也有200-300測試,PhantomJS 1.9.8 ,它需要大約只有100 MB內存幻影 隨着呼嚕聲和因果報應 他們全部一起使用了大約300mb的內存。

+0

我的問題是詹金斯和captureTimeout。瀏覽器加載時間過長。 –

2

取下因緣配置文件中的「要求」,只要使用的框架:「茉莉花」。

+1

如果有人使用sinon和chai或其他人呢?你的建議會打破測試。 – nottinhill

+0

它實際上解決了我的問題。 –

4

在我來說,我沒有列入我的test.js文件下面的代碼:

requirejs.config({ 
    callback: window.__karma__.start 
}); 

describe('tests', function() { 
    ... 

一旦此配置被列入測試開始運行。希望這可以爲別人節省很多的壓力!

2

檢查localhost正確指向127.0.0.1而不是無法訪問的IP,這可能發生在使用虛擬機的開發環境中。

0

這可能不是這裏的OP的情況下,但如果你正在測試的代碼打一個死循環,這將導致超時就這樣斷開。