[英]Karma/Jasmine times out without running tests
我正在嘗試在使用http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/生成的項目上從 Grunt 運行 Karma/Jasmine
Karma 啟動 PhantomJS(或 Chrome),並且根據 singleRun,它要么超時,要么只是坐在那里什么都不做。 我已經嘗試根據閱讀有類似問題的人的解決方案來更改captureTimeout
和browserNoActivityTimeout
,但它似乎不起作用。
我的相關包版本等:
我發現有人在 OS X 上有同樣的問題:
我已經嘗試將我所有的開發依賴項更新到最新版本,但問題仍然存在。
我的控制台 output 在下面。 webpack 行引用bundle is now VALID/INVALID令人擔憂,但我找不到關於它們含義的任何信息。 這是我的控制台 output:
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
});
};
我有同樣的問題。 從相關的GitHub 問題 中,我了解到您可以延長不活動超時。
在您的 gruntfile 或 karma 配置文件中設置此 Karma 配置選項:
browserNoActivityTimeout: 100000
我將它設置為 100 秒,我的測試成功運行。 我不知道是什么導致了延遲。
我已將 Karma 配置更改為
captureTimeout: 60000, // it was already there
browserDisconnectTimeout : 10000,
browserDisconnectTolerance : 1,
browserNoActivityTimeout : 60000,//by default 10000
另外我有 200-300 個測試,PhantomJS 1.9.8,它只需要大約 100 mb 的內存用於 Phantom 與 grunt 和 karma 他們一起使用了大約 300mb 的內存。
我們在構建服務器上遇到了類似的問題。
增加 browserNoActivityTimeout 工作到一定程度。 我們將它提高到 60000 毫秒,但是隨着單元測試數量的增加,phantomJS 沒有斷開連接的問題又回來了。
我們最終將問題追溯到 phantomJS 可用的 RAM。 我們有 1100 個單元測試需要大約 1 分鍾 30 秒才能運行,但 phantomJS 將無法在 60000 毫秒超時內斷開連接。
構建節點 VM RAM 從 2GB 增加到 4GB,然后 1100 個單元測試需要大約 45 秒才能運行,而 phantomJS 將在大約 5 秒內斷開連接。 一個巨大的改進。
有兩個教訓: 1. PhantomJS 需要內存,因此請確保它有足夠的 RAM 來完成它的工作 2. 分析您的代碼以了解在何處可以更有效地使用內存。
另一個可能的解釋是 RequireJS 妨礙了。 如果我將 'requirejs' 添加到 config.frameworks 數組中的 karma.conf.js,我會得到這個確切的錯誤。 這似乎覆蓋了原生的 require 函數並導致測試無法執行。 在我的情況下,描述塊被觸發,但如果它塊被觸發,則沒有。
就我而言,我沒有在 test.js 文件中包含以下代碼:
requirejs.config({
callback: window.__karma__.start
});
describe('tests', function() {
...
一旦包含此配置,測試就開始運行。 希望這可以減輕其他人的壓力!
從 karma 配置文件中刪除“requires”,只需使用框架:['jasmine']。
檢查localhost
是否正確指向127.0.0.1
而不是無法訪問的 IP,這可能發生在使用虛擬機的開發環境中。
我為我自己的環境解決了這個問題。 我在全球安裝了一堆 nodejs 包。 我沒有做回歸來確切地找出導致問題的包,但我強烈懷疑全球安裝了 karma 是原因。
如果您遇到此問題,請嘗試
sudo npm -g remove karma
如果這不起作用,那么我將刪除所有全局節點包(例如 yeoman、grunt-cli 等真正的全局包除外)。 然后在本地為您的項目安裝。
我還注意到,當您在 OS X 上運行sudo npm -i
時,它會將~/.npm的所有者更改為root ,隨后的npm -i
命令將失敗並顯示EACCESS錯誤。
此處的 OP 可能不是這種情況,但是如果您正在測試的代碼遇到無限循環,則會像這樣導致超時斷開連接。
這就是我收到此錯誤的原因,可能會幫助處於類似情況的人。 我的主要組件有多個使用不同服務的子組件,其中一個服務有一個 HTTP 調用,初始化失敗,因為我在子組件的 ngInit() 方法中使用該服務。 為了解決這個問題,我必須在主要組件規范中導入上述服務並為該服務附加一個模擬,然后它開始工作。
@Vijender 的回答讓我走上了正軌
就像用HttpClientModule
替換測試中的HttpClientTestingModule
一樣簡單。
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule
]
}).compileComponents();
}));
我通過在我的 Root.tsx 中刪除全局范圍內對異步函數的調用來解決此問題。
它在“真實”的瀏覽器窗口中工作,但在測試運行中不起作用。
它似乎使加載模塊本身掛起,因此它甚至沒有執行異步函數(因此不會顯示日志語句)
afterEach(function () {
document.body.innerHTML = '';
});
為我添加這個已修復的問題,測試開始運行得更快。 似乎它減少了無頭瀏覽器的負載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.