web-dev-qa-db-ja.com

Jest React例

React例から Jest Reactチュートリアル を実行しようとしていますが、エラーが発生します

λ npm test                                          

> ...                           
> jest                                              

Found 1 matching tests...                           
 FAIL  __tests__\CheckboxWithLabel-test.js (0.551s) 
npm ERR! Test failed.  See above for more details.  
npm ERR! not ok code 0   

例から直接コードをコピーしました。 package.jsonは次のとおりです。

{
  "dependencies": {
    "react": "*",
    "react-tools": "*"
  },
  "scripts":{
    "test": "jest"
  },
  "jest": {
    "scriptPreprocessor": "<rootDir>/preprocessor.js",
    "unmockedModulePathPatterns": [
      "<rootDir>/node_modules/react"
    ]
  },
  "devDependencies": {
    "jest-cli": "~0.1.17"
  }
}

これらのエラーを解決し、サンプルテストを正常に実行するために何ができるかについて何か考えはありますか?重要な詳細(または詳細)が欠落している可能性は非常に高いですが、完全にはわかりません。ああ、それが価値があるのであれば、これが影響する場合は、Windowsでこれを実行しています。私は本当に私のreactコンポーネントでいくつかのテストを受けたいと思っています(そこでもいくつかの問題があったので、基本的な例から始めました)-助けていただければ幸いです:)

25
Ryan Lanciaux

私は彼らのgithubページに issue を作成しました。それが実際にWindows関連の問題であるかどうかを確認するのを待っています

それまでの間、相対パスではなくモジュールの名前を指定するだけで、最終的には機能するようになりました

"unmockedModulePathPatterns": ["react"]
27
Ron

これについて検索することになった人にとって、@ ronのgithubの問題は最終的に解決され、unmockedModulePathPatternsは、必ずしもファイルパス自体ではなく、ファイルパスに一致する正規表現ステートメントの配列を期待しているという結論に達しました。これが、「相対」パスの使用が機能した理由です。 Jest APIドキュメントから:

モジュールローダーが自動的にモックを返す前に、すべてのモジュールと照合される正規表現パターン文字列の配列。モジュールのパスがこのリストのパターンのいずれかに一致する場合、モジュールローダーによって自動的にモックされることはありません。

これは、ほとんどの場合、実装の詳細としてほぼ常に使用される、一般的に使用される「ユーティリティ」モジュール(アンダースコア/ lo-dashなど)に役立ちます。一般に、このリストをできるだけ小さくし、個々のテストで常に明示的なjest.mock()/ jest.dontMock()呼び出しを使用することをお勧めします。テストごとの明示的な設定は、テストの他の読者がテストを実行する環境について推論するのがはるかに簡単です。

テストファイルの先頭でjest.mock()を明示的に呼び出すことにより、個々のテストでこの設定をオーバーライドすることができます。

https://facebook.github.io/jest/docs/api.html#config-unmockedmodulepathpatterns-array-string

そして問題自体から:

unmockedModulePathPatternsは、必要なすべてのモジュールがテストされる正規表現を作成するためにJestによって内部的に使用されます。そのため、有効な正規表現パターンを提供する必要があります。たとえば、これは私にとってうまく機能しました:

> unmockedModulePathPatterns: [
>       "node_modules\\" + path.sep + "react",
>       "node_modules\\" + path.sep + "reflux",
>       "node_modules\\" + path.sep + "react-router"
>     ],
5
MaxPRafferty

<rootDir>は実際のパスに置き換える必要があります。開始したいサブディレクトリがないようですが、場合によってはsrc/パスでのみテストを実行したいので、package.jsonは次のようになります。

{
  ...
  "jest": {
    "rootDir": "src",
    "scriptPreprocessor": "../jest/preprocessor.js" // Note: relative to src
  }
  ...
}
3