reactjs - 画像をインポートするとjestテストが壊れます

原文 reactjs testing webpack jestjs

Reactコンポーネントでアセットをインポートする
    (例:「../../../assets/img/logo.pngからロゴをインポート)
そのようなエラーを与える


  ({"Object。":function(module、exports、require、__ dirname、__ filename、global、jest){�PNG
      SyntaxError:無効または予期しないトークン
        ScriptTransformer._transformAndBuildScript(node_modules / jest-runtime / build / script_transformer.js:305:17)で


私のjest configは

"jest": {
"testRegex": ".*\\.spec\\.js$",
"moduleFileExtensions": [
  "js",
  "jsx",
  "json"
],
"moduleDirectories": [
  "node_modules",
  "src",
  "assets"
],
"moduleNameMapper": {
  "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$/": "<rootDir>/__mocks__/fileMock.js",
  "\\.(css|less|scss)$": "<rootDir>/__mocks__/styleMock.js"
},
"verbose": true,
"bail": true
}


私は何が欠けていますか?
答え
これをできる限りシンプルにします

画像ファイルをインポートすると、Jestは画像のバイナリコードを.jsとして解釈しようとするため、エラーが発生します。

the only way out is to mock a default response anytime jest sees an image import

これをどうやってやるの?


最初に、イメージのインポートが発生するたびにモックファイルを実行するようにJestに指示します。これを行うには、package.jsonファイルに以下のキーを追加します


"jest": {
 "moduleNameMapper": {
      "\\.(jpg|ico|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
      "\\.(css|less)$": "<rootDir>/mocks/fileMock.js"
    }
}



  既に"Jest"キーがある場合は、その中に"moduleNameMapper"子を追加するだけです



最後に、ルートにmocksフォルダーを作成し、その中にfileMock.jsファイルを作成します。ファイルに以下のスニペットを入力します


module.exports = ''; 

Note > if you are using es6 you can use export default ''; to avoid an Eslint flag


上記の手順が完了したら、テストを再開できます。

注意。偽装できるように、画像ファイルのさまざまな拡張子をmoduleNameMapperに忘れずに追加してください。

私が助けられたことを願っています。 #乾杯!
関連記事

reactjs - 未定義のプロパティ「params」を読み取れません(React Router 4)

reactjs - reduxで非同期アクションクリエーターをテストしてリアクションすると、未定義のプロパティ「.then」を読み取ることができません

unit-testing - EnzymeでblurまたはonBlurイベントをどのように生成しますか?

reactjs - reduxで再選択を使用してownPropsを取得するにはどうすればよいですか?

javascript - React、入力値のバインド

reactjs - 反応-ルータはTypeError:_this.props.historyが定義されていません

javascript - store.getStateは関数ではありません反応

javascript - Reactでテキストエリアのカーソル位置を変更する

javascript - 反応&Reduxの:CONNECT()複数のコンポーネント&ベスト・プラクティスに

arrays - 中に反応array.join行う方法はあります