この記事では『Jestのタイムアウト時間』について、
- Jestのタイムアウト時間は5秒なので注意
- Jestのタイムアウト時間の変更方法
- test()やit()の第3引数でタイムアウト時間を指定する方法
- jest.setTimeout()でタイムアウト時間を指定する方法
- Jestの設定ファイル(jest.config.js)でタイムアウト時間を指定する方法
などをプログラム例を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
Jestのタイムアウト時間は5秒
Jestではデフォルトのタイムアウト時間が5秒です。
The default timeout is 5 seconds
test(name, fn, timeout)
そのため、重い処理を実行するテストなど、5秒以上の時間を要するテストの場合にエラーが発生します。一例として、以下のテストプログラムを見てみましょう。以下のプログラムでは、setTimeout()
を用いることでテストに5秒以上の時間を要するようにしています。
// 6秒待機するtimer関数
const timer = () =>
new Promise((resolve) => {
setTimeout(() => {
resolve();
}, 6000);
});
it('テスト', async () => {
await timer(); // 6秒待機
expect('hello').toBe('hello');
});
テストを実行してみると、以下に示すように「Exceeded timeout of 5000 ms for a test(テストのタイムアウトが5000ミリ秒を超えた)」というエラーが発生します。
PS C:\Users\user01\Desktop\jestSetTimeOut> npm test
> jestsettimeout@1.0.0 test
> jest
FAIL ./sample.spec.js (5.502 s)
× テスト (5007 ms)
● テスト
thrown: "Exceeded timeout of 5000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
7 | });
8 |
> 9 | it('テスト', async () => {
| ^
10 | await timer(); // 6秒待機
11 | expect('hello').toBe('hello');
12 | });
at Object.it (sample.spec.js:9:1)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 5.575 s
Ran all test suites.
Jestのタイムアウト時間の変更方法
Jestのタイムアウト時間は5秒から変更させることができます。Jestのタイムアウト時間の変更方法は主に3つあります。
- test()やit()の第3引数でタイムアウト時間を指定する方法文①
- jest.setTimeout()でタイムアウト時間を指定する方法
- Jestの設定ファイル(jest.config.js)でタイムアウト時間を指定する方法文③
test()やit()の第3引数でタイムアウト時間を指定する方法
Jestのテスト関数であるtest()
やit()
を使用する際に、第3引数にタイムアウト時間(ミリ秒単位)を指定することができます。この方法は、各テストでJestのタイムアウト時間を変更する際に有効です。
タイムアウト時間を5秒(5000ms)から10秒(10000ms)にすると、以下のプログラムになります。
// 6秒待機するtimer関数
const timer = () =>
new Promise((resolve) => {
setTimeout(() => {
resolve();
}, 6000);
});
it('テスト', async () => {
await timer(); // 6秒待機
expect('hello').toBe('hello');
}, 10000); // 第3引数にタイムアウト時間(ここでは10000ms)を指定
テストを実行結果を以下に示します。テストの実行に6003msを要していますが、タイムアウト時間を10秒に変更したので、タイムアウトにならずテストが実行できるようになります。
PS C:\Users\user01\Desktop\jestSetTimeOut> npm test
> jestsettimeout@1.0.0 test
> jest
PASS ./sample.spec.js (6.465 s)
√ テスト (6003 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 6.538 s
Ran all test suites.
jest.setTimeout()でタイムアウト時間を指定する方法
jest.setTimeout()
を用いても、全体のJestのタイムアウト時間を変更することができます。この方法は複数のテストで一括してJestのタイムアウト時間を変更する際に有効です。
タイムアウト時間を5秒(5000ms)から10秒(10000ms)にすると、以下のプログラムになります(テストを2回行っています)。
jest.setTimeout(10000); // タイムアウト時間(ここでは10000ms)を指定
// 6秒待機するtimer関数
const timer = () =>
new Promise((resolve) => {
setTimeout(() => {
resolve();
}, 6000);
});
it('テスト01', async () => {
await timer(); // 6秒待機
expect('hello').toBe('hello');
});
it('テスト02', async () => {
await timer(); // 6秒待機
expect('hello').toBe('hello');
});
テストを実行結果を以下に示します。テストの実行にそれぞれ6006msと6009msの時間を要していますが、タイムアウト時間を10秒に変更したので、タイムアウトにならずテストが実行できるようになります。
PS C:\Users\user01\Desktop\jestSetTimeOut> npm test
> jestsettimeout@1.0.0 test
> jest
PASS ./sample.spec.js (12.497 s)
√ テスト01 (6006 ms)
√ テスト02 (6009 ms)
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 12.574 s
Ran all test suites.
jest.setTimeout()を設定ファイルに記述する方法
テストファイルに直接jest.setTimeout()
を記述するのではなく、以下に示すように、Jestの設定ファイル(jest.config.js)のsetupFilesAfterEnv
オプションを用いてもよいです。
jest.config.js
module.exports = {
setupFilesAfterEnv: ['./jest.setupFilesAfterEnv.js'],
};
jest.setupFilesAfterEnv.js
jest.setTimeout(10000); // タイムアウト時間(ここでは10000ms)を指定
上記のように記述すると、テストが実行される前に、setupFilesAfterEnv
で指定した「jest.setupFilesAfterEnv.js」が実行されるようになります。
あわせて読みたい
Jestの設定ファイル(jest.config.js)の『setupFilesAfterEnv』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見る【Jest】setupFilesとsetupFilesAfterEnvとは?
Jestの設定ファイル(jest.config.js)でタイムアウト時間を指定する方法
Jestの設定ファイル(jest.config.js)のsetTimeout
オプションを用いても、Jestのタイムアウト時間を変更することができます。この方法も複数のテストでJestのタイムアウト時間を一括変更する際に有効です。
jest.config.js
module.exports = {
testTimeout: 10000, // タイムアウト時間(ここでは10000ms)を指定
};
Jestのタイムアウト時間指定の優先順位
Jestのタイムアウト時間指定には以下の優先順位があります。
- test()やit()の第3引数でタイムアウト時間を指定する方法
- jest.setTimeout()でタイムアウト時間を指定する方法
- Jestの設定ファイル(jest.config.js)でタイムアウト時間を指定する方法
そのため、Jestの設定ファイル(jest.config.js)でタイムアウト時間を10000msに指定しても、jest.setTimeout()
でタイムアウト時間を6000msにすると、jest.setTimeout()
で指定したタイムアウト時間が優先されて適用されます。
本記事のまとめ
この記事では『Jestのタイムアウト時間』について、以下の内容を説明しました。
- Jestのタイムアウト時間は5秒なので注意
- Jestのタイムアウト時間の変更方法
- test()やit()の第3引数でタイムアウト時間を指定する方法
- jest.setTimeout()でタイムアウト時間を指定する方法
- Jestの設定ファイル(jest.config.js)でタイムアウト時間を指定する方法
お読み頂きありがとうございました。