web-dev-qa-db-ja.com

Karma / Jasmineがテストを実行せずにタイムアウトする

http://newtriks.com/2013/12/31/automating-react-with-yeoman-and-grunt/ で生成されたプロジェクトでGruntからKarma/Jasmineを実行しようとしています。

KarmaはPhantomJS(またはChrome)を起動しますが、singleRunに応じて、タイムアウトするか、ただそこに座って何もしません。同様の問題を抱える人々からのソリューションを読むことに基づいてcaptureTimeoutbrowserNoActivityTimeoutを変更しようとしましたが、うまくいかないようです。

関連するpacakgeバージョンなど:

  • NodeJS:0.10.25
  • カルマ:0.12.16
  • Webpack:1.1.11
  • webpack-dev-server:1.4.1
  • カルマジャスミン:0.1.5
  • Linux:Ubuntu 14.04

私は 同じ問題を抱えている人 をOS Xで見つけました:

すべてのdev依存関係を最新バージョンに更新しようとしましたが、問題はまだ残っています。

私のコンソール出力は以下です。 bundleを参照するwebpack行は、現在VALID/INVALIDになっていますが、その意味についての情報は見つかりません。コンソール出力は次のとおりです。

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
});
};
44
edoloughlin

同じ問題がありました。関連する GitHub Issue から、非アクティブタイムアウトを延長できることを学びました。

Gruntfileまたはkarma構成ファイルでこのKarma構成オプションを設定します。

browserNoActivityTimeout: 100000

100秒に設定すると、テストは正常に実行されました。遅延の原因はわかりません。

44
Matthias Dailey

Karma configを変更しました

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

また、PhantomJS 1.9.8の200-300のテストがあり、Phantomには約100 mbのメモリしか必要ありません。

29
Anatoli Klamer

ビルドサーバーで同様の問題が発生しました。

BrowserNoActivityTimeoutを大きくすると、ある程度は機能しました。これを60000ミリ秒にアップしましたが、単体テストの数が増えると、phantomJSが切断されないという問題が返されました。

最終的には、ファントムJSで利用可能なRAMに至るまで問題を追跡しました。実行に1m30秒かかる1100個のユニットテストがありましたが、phantomJSはタイムアウト60000ms以内に切断できませんでした。

ビルドノードVM RAMは2GBから4GBに増加し、1100ユニットテストの実行には約45秒かかり、phantomJSは約5秒で切断されました。改善。

2つの教訓があります。1. PhantomJSはメモリを大量に消費するため、十分なRAMを実行してください。2.コードをプロファイリングして、メモリ使用量を効率化できる場所を確認します。

16
Gareth

別の考えられる説明は、RequireJSが邪魔になることです。 config.frameworks配列のkarma.conf.jsに「requirejs」を追加すると、この正確なエラーが発生します。これにより、ネイティブのrequire関数がオーバーライドされ、テストが実行されないようです。私の場合、describe-blockはトリガーされましたが、it-blockがトリガーされた場合はトリガーされません。

7
Micros

私の場合、test.jsファイルに次のコードを含めていませんでした。

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

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

この構成が含まれると、テストの実行が開始されます。うまくいけば、他の人のストレスを大幅に軽減できます!

4
garryp

カルマ設定ファイルから「requires」を削除し、フレームワークを使用します:['jasmine']。

3
user5704261

localhost127.0.0.1を正しく指し、到達不能なIPではないことを確認します。これは、たとえば仮想マシンを使用する開発環境で発生する可能性があります。

2
eloone

私は自分の環境でこれを解決しました。多数のnodejsパッケージをグローバルにインストールしました。どのパッケージが問題を引き起こしたかを正確に把握するための回帰分析は行いませんでしたが、カルマがグローバルにインストールされていることが原因であると強く疑っています。

この問題がある場合は試してください

Sudo npm -g remove karma

それが機能しない場合は、すべてのグローバルノードパッケージを削除します(たとえば、yeoman、grunt-cliなどの真のグローバルパッケージを除く)。そして、プロジェクト用にローカルにインストールします。

また、Sudo npm -i OS Xでは、〜/ .npmの所有者をに変更しますrootおよび後続のnpm -iコマンドは[〜#〜] eaccess [〜#〜]エラーで失敗します。

1
edoloughlin

これはここのOPには当てはまらないかもしれませんが、テストしているコードが無限ループに達すると、このようにタイムアウトで切断されます。

1
Todd Sjolander