ユニットテストファイルmy-spec.jsがあり、mochaで実行されている場合、次の質問があります。
mocha my-spec.js
デフォルトのタイムアウトは2000ミリ秒です。コマンドラインパラメータを使用して、部分的なテストのために上書きできます。
mocha my-spec.js --timeout 5000
問題は、すべてのテストでデフォルトのタイムアウトをグローバルに変更することは可能ですか?あなたが電話するとき
mocha my-spec.js
デフォルトのタイムアウト値は2000ミリ秒とは異なります
デフォルトでは、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コンテキストにアクセスできません。
正解に追加するだけで、次のような矢印関数を使用してタイムアウトを設定できます。
it('Some test', () => {
}).timeout(5000)
完全を期すためにこれを追加します。 (私のように)package.json
ファイルでスクリプトを使用する場合は、--timeout
オプションをmochaに追加するだけです:
"scripts": {
"test": "mocha 'test/**/*.js' --timeout 10000",
"test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},
その後、npm run test
を実行して、タイムアウトを10,000ミリ秒に設定してテストスイートを実行できます。
Mochaの現在のバージョンでは、タイムアウトは次のようにグローバルに変更できます。
mocha.timeout(5000);
テストスイートの任意の場所、できれば仕様の最上部または別のテストヘルパーに上記の行を追加してください。
古いバージョンでは、ブラウザのみで、mocha.setup
を使用してグローバル設定を変更できました。
mocha.setup({ timeout: 5000 });
documentation は、グローバルタイムアウト設定をカバーしませんが、他の一般的なシナリオでタイムアウトを変更する方法に関するいくつかの例を提供します。