0

私のreactJS ES6アプリケーションで単体テストを作成する方法を見つけようとしています。私のアプリケーションはすでに es6 モジュール システムを使用しており、jspm/babel で systemJs にトランスパイルされています。

プリプロセッサとして babel-jest を見つけましたが、それを使用しても、jest が SystemJ を見つけられないため、テストを実行できません。( 「システムが定義されていません」というエラーがコンソールに表示されます)

ブラウザでは、jspm ドキュメントで説明されているように、SystemJs はグローバルにロードされます。プリプロセッサ内に SystemJ をロードする必要があると思いますが、テストで追加のモジュールをロードするために systemJ を使用できるようにするにはどうすればよいですか?

前もって感謝します

4

2 に答える 2

0

本質的に、JSPM/SystemJS で実行されているアプリで Jest をうまく動作させるには、config.js ファイルに保持されているすべてのマッピングについて「教える」必要があります (または System.config() を呼び出します)。

長い答えは、次のように、JSPM でインストールした依存関係ごとにエントリを作成する必要があるということです。

//jest configuration 
moduleNameMapper: {     
   ...
   "^redux$": "redux@3.6.0",
   ...
}

エイリアスごとに、少なくとも 1 つのエントリが必要です。

moduleNameMapper: {     
        ...
        "^common\\/(.*)": "<rootDir>/src/common/$1", //for a dir alias
       "^actions$": "<rootDir>/src/actions/index", //for a file alias
       ...
}

nodeNameMapperにこれらのマッピングも必要です。

moduleNameMapper: {     
    ...
         "^npm:(.*)": "<rootDir>/jspm_packages/npm/$1",
            "^github:(.*)": "<rootDir>/jspm_packages/github/$1",
    ...
}

最後に、このmoduleDirectories 構成が必要です。

moduleDirectories: ["node_modules", "jspm_packages/npm", "jspm_packages/github"]

すべての依存関係レジストリの 2 つのコピーを保持したくないし、それらが変更されたときにそれらを同期する必要があるため、これは実際には実用的ではありません...

短くてより良い答えは、私のgulp-jest-jspmプラグインを使用することです:)

gulpを使用しない場合でも、getJestConfig()メソッドを使用して、Jest を実行する前に構成を生成できます。

于 2016-12-20T19:29:03.953 に答える
0

残念ながら、現時点では Jest は SystemJS ES6 モジュールをサポートしていません。

次のコメントを参照してください。

そのため、ノード解決アルゴリズムに基づいてモジュールが解決されると jest が想定しているように思えます。

残念ながら、これは SystemJS の解決アルゴリズムと互換性がありません。

APIを介して「カスタムリゾルバー」アルゴリズムを設定する方法がjestにある場合、jspmをjestにプラグインできますが、これが現在可能かどうかはわかりません.

-- SystemJS の作成者であるGuy Bedford 氏によるコメント、2015 年 6 月


コミュニティへの貢献でない限り、[SystemJS] が公式にサポートされる可能性は低いです。

-- @cpojer によるコメント、Jest コラボレーター、2016 年 1 月


次の問題も参照してください: jest テスト ケースで systemjs を要求すると無効な URL がスローされる

于 2016-01-25T12:33:01.747 に答える