1. ホーム
  2. javascript

[解決済み】mochaのデフォルトタイムアウトを変更する

2022-02-19 22:51:53

質問

ユニットテストファイルmy-spec.jsをmochaで実行する場合。

mocha my-spec.js

デフォルトのタイムアウトは2000msになります。コマンドラインパラメータで部分的に上書きすることができます。

mocha my-spec.js --timeout 5000

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

mocha my-spec.js

解決方法は?

デフォルトでは、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...
});

これは、アロー関数が this を、その関数が出現するスコープから取得します。Mocha は関数を呼び出す際に、良い値である this が、その値はarrow関数の内部では渡されません。Mocha のドキュメントによると このトピック :

Mocha に矢印関数 (「ラムダ」) を渡すことは推奨されません。レキシカルバインドのため、そのような関数は Mocha のコンテキストにアクセスできません。