モカのデフォルトのタイムアウトを変更する


160

ユニットテストファイルmy-spec.jsがあり、mochaで実行している場合:

mocha my-spec.js

デフォルトのタイムアウトは2000ミリ秒です。コマンドラインパラメータを使用して、部分テスト用に上書きできます。

mocha my-spec.js --timeout 5000

すべてのテストでデフォルトのタイムアウトをグローバルに変更することは可能ですか?つまり、デフォルトのタイムアウト値は、呼び出し時の2000ミリ秒とは異なります。

mocha my-spec.js

Mochaの公式Webサイトでも、これについて詳しく説明しています。
RaviRokkam

回答:


303

デフォルトでは、Mochaはtest/mocha.optsコマンドライン引数を含むことができるという名前のファイルを読み取ります。したがって、次のようなファイルを作成できます。

--timeout 5000

コマンドラインでMochaを実行すると、このファイルが読み込まれ、デフォルトで5秒のタイムアウトが設定されます。

あなたの状況に応じてより良いかもしれない別の方法describeは、テストファイルのトップレベルの呼び出しでこのように設定することです:

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

これにより、ファイルごとにのみタイムアウトを設定できます。

グローバルなデフォルトを5000にしたいが、一部のファイルには別のものを設定する場合は、両方の方法を使用できます。


あなたが電話をかけるthis.timeout(またはthisあなたのためにそのモカセットの他のメンバーにアクセスする)なら、一般的に矢印関数を使うことができないことに注意してください。たとえば、これは通常は機能しません

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

これは、arrow関数がthis関数が出現するスコープから取得するためです。Mochaは適切な値で関数を呼び出しますがthis、その値はarrow関数内に渡されません。Mochaのドキュメントはこのトピックについて述べています

矢印関数(「ラムダ」)をMochaに渡すことはお勧めしません。これの字句バインディングのため、そのような関数はMochaコンテキストにアクセスできません。


1
情報をありがとう。しかし、私はmocha.optsファイルを変更しようとしましたが、影響はありません。
lm。

2
適切な場所に作成しましたか?Mochaは、このファイルが必要な場所について非常に具体的です。あなたがモカを実行している場合/home/me/src/proj/:その後、モカは、このファイルを検索するために起こっている/home/me/src/proj/test/mocha.opts
ルイ

どうもありがとう 。影響を受ける変更
lm

this.timeout(10000); //デフォルトのタイムアウト^例外TypeError:this.timeoutはスイートでは関数ではありません。<匿名>(/Users/jeff.l/Documents/workspace/unit-tests/mocha-chai_tests/checkoutTest.js:12:10)。
ジェフローリー

6
@JeffLoweryアロー関数を使用していますか?矢印関数は新しいを確立しませんthis。これは通常this.timeout、コメントで示すように失敗します。
ルイ

62

正しい答えに追加するだけで、次のような矢印関数を使用してタイムアウトを設定できます。

it('Some test', () => {

}).timeout(5000)

7
問題は、「すべてのテストでデフォルトのタイムアウトをグローバルに変更すること」です。あなたの答えは一つのテストを変えるだけです。describe('suite', () => {...}).timeout(5000)動作しません。
aleung 2017

前の回答と同様に、提案されたソリューションは現在効果がありません。mochajs.org/#timeoutssetTimeout、テスト内に明示的な指示を挿入するよう指示しています。
Marco Faustinelli、2018

これは私のためにmocha @ 5(特定のテスト)で機能しました
フェルナンドガブリエリ

@MarcoFaustinelliドキュメントを誤解しています。setTimeoutsはMochaとは何の関係もありません。タイムアウト設定の効果を示すためにあります。
オリゴフレン

33

これを完全にするために追加します。(私のような)package.jsonファイルでスクリプトを使用する場合は、--timeoutオプションをmochaに追加します。

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

次に、実行npm run testして、タイムアウトを10,000ミリ秒に設定してテストスイートを実行できます。


誰かが興味を持っている場合に備えて、ほとんどのIDEでは、テスト実行用のモカオプションを挿入することもできます。たとえば、WebStormの場合、[実行]-> [構成の編集]-> [追加のモカオプション]にこれを入力できます(「--timeout 10000 ")。
Rubicon

25

Mochaの現在のバージョンでは、タイムアウトは次のようにグローバルに変更できます。

mocha.timeout(5000);

上記の行をテストスイートの任意の場所、できれば仕様の一番上、または別のテストヘルパーに追加するだけです。


古いバージョンでは、ブラウザでのみ、を使用してグローバル構成を変更できましたmocha.setup

mocha.setup({ timeout: 5000 });

ドキュメントは、他の一般的なシナリオでタイムアウトを変更する方法についていくつかの例をグローバルタイムアウト設定をカバーしますが、提供しません。


5
これはノードでは機能しません。stackoverflow.com/a/47915119/893113を参照してください。CLIオプションが唯一の方法のようです。
paulmelnikow

ブラウザでも動作しません。今日の時点で、回答にリンクされているドキュメントにはtimeoutパラメーターについての記述はありません。逆に、mochajs.org /#timeoutssetTimeout、テスト内に明示的な指示を挿入するよう指示しています。
Marco Faustinelli、2018

@MarcoFaustinelliドキュメントを誤解しています。setTimeoutsはMochaとは何の関係もありません。タイムアウト設定の効果を示すためにあります。
オリゴフレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.