web-dev-qa-db-ja.com

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

ユニットテストファイルmy-spec.jsがあり、mochaで実行されている場合、次の質問があります。

mocha my-spec.js

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

mocha my-spec.js --timeout 5000

問題は、すべてのテストでデフォルトのタイムアウトをグローバルに変更することは可能ですか?あなたが電話するとき

mocha my-spec.js

デフォルトのタイムアウト値は2000ミリ秒とは異なります

124
lm.

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

--timeout 5000

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

状況に応じてより適切な別の方法は、テストファイルのトップレベルのdescribe呼び出しで次のように設定することです。

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

    // tests...
});

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

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


this.timeoutを呼び出す(または、Mochaが設定するthisの他のメンバーにアクセスする)場合、一般に矢印関数を使用できないことに注意してください。たとえば、これは通常機能しません

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

    // tests...
});

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

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

237
Louis

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

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

}).timeout(5000)
35
Denis

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

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

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

28
Freedom_Ben

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

mocha.timeout(5000);

テストスイートの任意の場所、できれば仕様の最上部または別のテストヘルパーに上記の行を追加してください。


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

mocha.setup({ timeout: 5000 });

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

21
GOTO 0