Jest v29 アップグレードで発生する「Test environment jest-environment-jsdom cannot be found」エラーの解決方法

2024-06-08

Jest v29へのアップグレードで発生する「Test environment jest-environment-jsdom cannot be found」エラーの解決方法

Jest v29へのアップグレードに伴い、従来デフォルトで組み込まれていたjest-environment-jsdomパッケージが削除されました。このため、jsdom環境でテストを実行する場合、以下の手順で手動でインストールと設定を行う必要があります。

エラー内容

Jest v29でテストを実行しようとすると、以下のエラーが発生します。

Error: Test environment jest-environment-jsdom cannot be found.

Ensure that jest-environment-jsdom is installed and configured correctly.

解決手順

  1. jest-environment-jsdomとjsdomパッケージをインストール
npm install jest-environment-jsdom jsdom
  1. Jest設定ファイル(jest.config.js)を編集

以下の設定をjest.config.jsファイルに追加します。

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'jest-environment-jsdom',
};

補足

  • TypeScriptを使用している場合は、ts-jestプリセットをインストールする必要があります。



    // jest.config.js
    module.exports = {
      preset: 'ts-jest',
      testEnvironment: 'jest-environment-jsdom',
    };
    
    // example.test.ts
    import { expect } from '@jest/globals';
    
    test('サンプルテスト', () => {
      expect(1).toBe(1);
    });
    

    上記のコードは、Jest v29でjsdom環境でテストを実行するための設定とサンプルテストコードです。

    jest.config.js

    • preset: 'ts-jest': TypeScript用のJestプリセットを設定します。
    • testEnvironment: 'jest-environment-jsdom': テスト実行環境をjsdomに設定します。

    example.test.ts

    • import { expect } from '@jest/globals';: Jestのexpect関数を読み込みます。
    • test('サンプルテスト', () => {}): テストケースを定義します。
    • expect(1).toBe(1);: 1と1が等しいことを検証します。

    このサンプルコードを参考に、ご自身のテストコードをjsdom環境で実行できるように設定してください。




    Jest v29でのjsdom環境テスト:代替手段

    jest-environment-puppeteer

    • 利点:
      • 本物のChromiumブラウザを使用してテストを実行するため、より現実的なテスト結果を得ることができます。
      • ヘッドレスモードとフルヘッドレスモードの両方をサポートしています。
    • 欠点:
      • puppeteerパッケージのインストールと設定が必要となります。
      • jest-environment-jsdomよりも動作が重くなる可能性があります。

    jest-fake-dom

    • 利点:
      • 軽量で高速なjsdom環境を提供します。
    • 欠点:

      手動でjsdomをセットアップ

      • 利点:
        • 欠点:
          • 複雑な設定が必要となります。
          • テストコードの保守が難しくなる可能性があります。

        各代替手段の比較表

        代替手段利点欠点
        jest-environment-puppeteerより現実的なテスト結果インストールと設定が必要、動作が重い
        jest-fake-dom軽量で高速、移行が容易本来のブラウザと挙動が異なる場合がある
        手動でjsdomをセットアップ完全な制御が可能複雑な設定が必要、保守が難しい

        最適な代替手段は、テストの要件と開発者の好みによって異なります。

        • より現実的なテスト結果が必要な場合は、jest-environment-puppeteerがおすすめです。
        • 軽量で高速なテスト環境が必要な場合は、jest-fake-domがおすすめです。
        • 完全な制御が必要な場合は、手動でjsdomをセットアップする方法がおすすめです。

          javascript node.js typescript


          jQueryを使わずにJavaScriptで次の要素と前の要素を取得する方法

          この解説では、JavaScriptを使用して、HTMLドキュメント内の要素の次の要素と前の要素を取得する方法について説明します。目次DOMの概要次の要素を取得する 2.1. nextSibling プロパティ 2.2. nextElementSibling プロパティ 2.3. querySelector() メソッド 2.4. querySelectorAll() メソッド 2.5. getElementsByTagName() メソッド...


          JavaScript と jQuery で「Can't append

          JavaScript や jQuery で <script> 要素を動的に追加しようとすると、思わぬ挙動やエラーが発生することがあります。この問題は、いくつかの原因と解決策によって引き起こされます。本記事では、この問題を深く掘り下げ、原因と解決策を網羅的に解説します。さらに、安全かつ効率的な <script> 要素の追加方法についても詳しく紹介します。...


          process.mainModuleプロパティでコマンドライン実行を検知

          module. parentプロパティは、現在のモジュールを読み込んだモジュールの情報を保持します。コマンドラインで直接実行された場合は、module. parentはnullになります。process. mainModuleプロパティは、メインスクリプトファイルを表すモジュールオブジェクトを返します。コマンドラインで直接実行された場合は、process...


          "SyntaxError: Use of const in strict mode" エラーの原因と解決策

          このエラーは、JavaScriptまたはNode. jsでconstキーワードを使用して変数を宣言しようとしたときに発生します。constキーワードは、変数の値を宣言時に固定し、後から変更できないようにするために使用されます。厳格モードこのエラーが発生する主な原因は、厳格モードが有効になっていることです。厳格モードは、JavaScriptまたはNode...


          JavaScriptで日付時刻を扱うためのライブラリ比較:Moment.js、Luxon、Day.js

          Moment. jsライブラリをプロジェクトにインストールする必要があります。以下の方法でインストールできます。CDN経由:npm:yarn:Moment. jsライブラリをロードします。2つの日付をMomentオブジェクトに変換します。diff()メソッドを使用して、2つの日付間の差をミリ秒単位で取得します。...