🙌
ESMに移行したライブラリのアップデートでJestが動かない
特定のライブラリがCommonJSからES Modulesに完全移行したのでアップデートしたところ、Jestで書かれたテストが動かなくなってしまった。
調べてみると、JestはCommonJS前提で動作するもので、テストコード/テスト対象コードをESMで書きたい場合は、ESMからCJSに動的に変換することが必要とのこと。
この時必要だった手順は以下。
実施した手順
- トランスフォーマーにbabel-jestを設定する
jest.config.json
{
"transform": {
"\\.[jt]sx?$": "babel-jest"
}
}
- transformIgnorePatternsに対象ライブラリを設定する
node_modulesはデフォルトでトランスパイルされない設定のため、transformIgnorePatternsを設定する。今回はflattenのアップデートだったので以下の指定をした。
jest.config.js
{
"jest": {
"transformIgnorePatterns": [
"node_modules/(?!flat)/"
]
}
}
- (next/jestを使用してる場合)設定ファイルを上書きする
ここが一番ハマった。next/jestを使用してる場合は、通常の書き方ではtransformIgnorePatternsを設定することが出来ない。以下のような書き方にする必要がある。
jest.config.js
const customJestConfig = {
// Custom config
};
module.exports = async () => ({
...(await createJestConfig(customJestConfig)()),
transformIgnorePatterns: ["node_modules/(?!(package))"], // next/jestの設定を上書き
});
Discussion