53

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

Karma は PhantomJS (または Chrome) を起動し、singleRun に応じて、タイムアウトするか、そのまま何もしません。captureTimeout同様の問題を抱えている人々からの解決策を読んで、変更を試みましbrowserNoActivityTimeoutたが、うまくいかないようです。

関連するパッケージのバージョンなど:

  • NodeJS: 0.10.25
  • カルマ: 0.12.16
  • ウェブパック: 1.1.11
  • webpack-dev-server: 1.4.1
  • カルマ-ジャスミン: 0.1.5
  • Linux: Ubuntu 14.04

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

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

私のコンソール出力は以下のとおりです。bundle is now VALID/INVALIDを参照する 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
});
};
4

12 に答える 12

49

私も同じ問題を抱えていました。関連するGitHub Issueから、非アクティブ タイムアウトを延長できることを知りました。

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

browserNoActivityTimeout: 100000

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

于 2014-07-22T16:51:20.777 に答える
33

Karma の設定を次のように変更しました。

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

また、200〜300のテスト、PhantomJS 1.9.8があり、うなり声とカルマを使用してPhantomに約100 mbのメモリしか必要としません。それらはすべて合わせて約300 mbのメモリを使用しました。

于 2015-11-19T11:43:34.240 に答える
16

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

browserNoActivityTimeout を増やすと、ある程度機能しました。60000msに上げましたが、ユニットテストの回数が増えるにつれ、phantomJSが切断されないという問題が再発しました。

最終的に、phantomJS で使用できる RAM にまで問題を突き止めました。実行に約 1 分 30 秒かかる 1100 個の単体テストがありましたが、phantomJS は 60000 ミリ秒のタイムアウト内に切断できませんでした。

ビルド ノードの VM RAM が 2GB から 4GB に増加し、1,100 個の単体テストの実行に約 45 秒かかり、phantomJS は約 5 秒で切断されました。大きな改善。

2 つの教訓があります。 1. PhantomJS はメモリを大量に消費するため、十分な RAM があることを確認してください。

于 2014-12-05T20:31:04.953 に答える
7

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

于 2015-10-20T13:20:04.807 に答える
4

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

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

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

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

于 2016-07-19T10:53:32.893 に答える
3

カルマ構成ファイルから「requires」を削除し、フレームワークを使用するだけです: ['jasmine']。

于 2015-12-21T17:01:33.743 に答える
2

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

于 2016-09-19T13:23:14.450 に答える
1

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

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

sudo npm -g remove karma

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

sudo npm -iまた、OS X で実行すると~/.npmの所有者がrootに変更され、後続のnpm -iコマンドがEACCESSエラーで失敗することにも気付きました。

于 2014-07-17T07:19:43.210 に答える
1

このエラーが発生した理由は次のとおりです。同様の状況にある人を助けるかもしれません。私のメイン コンポーネントには、異なるサービスを使用する複数の子コンポーネントがありました。サービスの 1 つに HTTP 呼び出しがあり、子コンポーネントの ngInit() メソッドでそのサービスを使用していたため、初期化に失敗しました。この問題を解決するには、上記のサービスをメイン コンポーネントの仕様にインポートし、サービスのモックを添付する必要がありました。その後、動作し始めました。

于 2019-10-23T16:23:04.383 に答える
1

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

于 2017-11-03T14:30:47.610 に答える