🐙

✍️ Jestのタイムアウト延長をサクッと解決

に公開

はじめに

Jestでテストを書いていると、長時間処理を含むテストが原因で「Exceeded timeout of 5000 ms for a test.」エラーにハマったことはありませんか?
本記事では、シンプルにタイムアウト値を伸ばす方法をまとめつつ、特にProjen環境での設定例を紹介します。


タイムアウトエラーとは?

デフォルトのタイムアウトが5秒に設定されていると、重めの処理(ネットワーク呼び出し、データベース初期化など)を含むテストで失敗します。

Exceeded timeout of 5000 ms for a test.

このままでは開発効率が下がるので、タイムアウト値を適切に伸ばしましょう。


方法1: package.json でグローバル設定

最もお手軽なのが package.jsonjest.testTimeout を書き換える方法。

{
  "jest": {
    "testTimeout": 20000  // 全テストを20秒に延長
  }
}

設定後はnpm testnpx jestの実行時に反映されます。


方法2: Projen .projenrc.ts で設定

プロジェクトをProjenで管理している場合は、.projenrc.tsに直接設定を追加すると楽チンです。

const project = new typescript.TypeScriptProject({
  // 省略...
  jestOptions: {
    jestConfig: {
      testTimeout: 15000,  // テスト全体を15秒に延長
    },
    extraCliOptions: ['--silent'],
  },
});

再生成すれば、自動的に jest.config.js に反映されます。


他の設定例

  • テスト単位の指定

    test('長時間処理テスト', async () => {
      // …重い処理…
    }, 10000); // 個別に10秒に設定
    
  • jest.setTimeout の利用

    // ファイルの先頭で
    jest.setTimeout(20000);
    

まとめ

  • デフォルトの5秒では重めのテストに不向き
  • package.json.projenrc.ts で一発設定
  • 必要に応じてテスト単位やファイル単位でも調整可能

これでタイムアウト地獄から解放されて、快適なテストライフを送りましょう!🎉

Discussion