Jestを使用してreactコンポーネントでいくつかの非常に簡単なテストを実行しようとしています。コンポーネントファイルの先頭にあるこの行が原因で問題が発生しています
import {} from './style.less';
ここでのインポートはテストする必要がなく、理想的にはテストから無視されます。
npm test
を介してテストを実行すると、応答が返されます
FAILtests/ app_test.js●ランタイムエラーSyntaxError:予期しないトークン{ファイル 'client/components/app /style.less'。
プリプロセッサが正しく設定されていることを確認し、「preprocessorIgnorePatterns」構成が正しいことを確認してください。 http://facebook.github.io/jest/docs/api.html#preprocessorignorepatterns-array-string 現在Jestをセットアップしているか、プリプロセッサを変更している場合は、
jest --no-cache
を試してください。プリプロセッサ:node_modules/jest-css-modules。 Jestは、次の前処理されたコードを実行しようとしました。//いくつかの.lessコード
しかし、インポート行が少ないことをコメントアウトすると、テストは正しく実行されます。
Jestにこのコード行をスキップさせたり、このインポートを無視させたりするにはどうすればよいですか?
それでもこの問題が発生する場合は、次の構成を_jest.config.json
_ファイルに追加してみてください。
"transform": { "^.+\\.(css|less)$": "./styleMock.js" }
ここで、_styleMock.js
_で、_.less
_ファイルを次のように変換する transformer を作成しています。
module.exports = { process() { return '' } }
テストの上部にある.lessファイルを手動でモックする以外の方法で、jestが無視するファイルを少なくする唯一の方法は、次のとおりです。
jest.mock("../../src/styles.less", () => jest.fn());
Package.jsonに以下を追加することでした:
"jest": {
"moduleNameMapper": {
".*\\.less$": "<rootDir>/pathToDummyFile/dummy.js"
}
},
コードがより少ないファイルをインポートしようとすると、代わりにインポートをリダイレクトして空のダミーファイルをフェッチします。これにより、予期しないトークンエラーが発生しなくなります。
パーティーには少し遅れますが、多分これは今日の誰かを助けるでしょう。 jest-transform-stub を使用します。
Jest構成で、jest-transform-stubを追加して、スタブするJavaScript以外のアセットを変換します。
{ "jest": { // .. "transform": { "^.+\\.js$": "babel-jest", ".+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub" } } }
FAQ
モジュールが変換されていません
Jestは、デフォルトではnode_modulesに変換を適用しません。
moduleNameMapper
を使用してこれを解決できます。{ "jest": { // .. "moduleNameMapper": { "^.+.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub" } } }
私はignore-styles( https://github.com/bkonkle/ignore-styles )で同じ問題を解決しました。私はこのlibをモカで使用しましたが、冗談で大丈夫だと思います。