2015-10-17 20 views
8

Webpack & Jestを使用してプロジェクトを設定しています。現時点では、Webpack解決構成ではJestテストで問題が発生します。私のWebPACKの設定では、私は次のオプションが設定されている:src/assets/unknown.svg(私のプロジェクトのルートからの相対)Webpackを模倣してJestを設定してルートを解決し、エイリアスを解決します

import UnknownImg from 'assets/unknown'; 

以上が実際に住んでいる:

resolve: { 
    root: [__dirname + "/src/" ], 
    extensions: ['', '.js', '.coffee', '.jsx', '.css', '.scss', '.svg'] 
    } 

これは私が持つ資産やモジュールを必要とすることができます。

しかし、上記のような行のファイルのテストを実行すると、そのモジュール/アセットへのパスを解決するときにエラーが発生します。この場合

Error: /Users/byronsm/dev/nerve-center/src/components/organisms/system_status.jsx: Cannot find module 'assets/unknown' from '/Users/byronsm/dev/nerve-center/src/components/organisms'

それがインポートされたモジュールパスの相対的な検索をやっているように見えます。 JestにWebpackと同じように動作させる方法はありますか?

答えて

20

解決策は公式のjestドキュメントで提供されています。 Webpack Tutorialを参照してください。要するに

package.jsonであなたの冗談の設定にmodulePathsオプションを追加します。

"jest": { 
    "modulePaths": ["src"], 
    ... 
} 
+0

リンクが壊れているようです。私はこれがあなたが参照していると思います:https://facebook.github.io/jest/docs/en/configuration.html#modulepaths-array-string – clu

0

良い夜の休息の後、私はこれをもう一度見て、それがJest構成ではなくノードであることを認識しました。 WebPACKの中resolve.rootの設定の動作を模倣するための最良の方法はjestを実行しているときに、同じディレクトリに環境変数NODE_PATHを設定することです:

NODE_PATH=src jest 

本当にそれが解決し、複数のディレクトリの問題を解決していないこと私の問題。この記事は私が解決策を少し良く理解するのを助けましたhttps://gist.github.com/branneman/8048520

1

Jestpackは、Jestを実行する前にWebpackでテストファイルをビルドすることでこの問題を解決することを目指しています。つまり、Webpack設定の特別なモジュール解決ルールやローダーは、本番ビルドとまったく同じ方法で動作します。

+0

"リンクのみ"の不公平なラベル付けのようですが、私は彼らの答えはリンク自体なしではかなり読みやすいと思います。 – Krustal

0

webpackのようにパスを解決するために、mimic-webpackにwebpackの設定とノードのrequireへのフックを書きました。私は冗談でテストしていませんが、ノードで動作しているシンプルなローダーをサポートするスペックランナーでも動作します。

1

あなたが成熟した(数日間は思えない冗談20+ resolver optionを使用してjest-webpack-resolver

このパッケージでそれをプラグインすることができます私のために仕事をしています。また、現在のところ、Jest設定を個別のjest.config.jsファイルにするか、CLI経由で提供する必要があります(package.jsonはサポートしていません)。

関連する問題