【Jest】トランスパイルできないモジュールをモック化する方法
はじめに
JestはES5以下にトランスパイルできないモジュールがあるとエラーになってしまいテストを実行できません。
どうすればよいのでしょうか?
解決方法
テストの内容に関連のないモジュールであれば、モジュールごとモックしてしまうことでテストを進めることができます。
エラーの例
[react-native-firebase]というライブラリを導入したところ、Jestのテストで読み込めませんでした。
SyntaxError: Cannot use import statement outside a module
1 | import React, { useEffect } from 'react';
> 2 | import firebase from '@react-native-firebase/dynamic-links';
| ^
よく紹介されている方法
transformIgnorePattern
にモジュール名を記述する方法がよく紹介されていますが、エラーが治らないこともあるようです。
moduleNameMapper
を使用する方法
今回はmoduleNameMapper
を使用して、モックファイルをJestに参照させる方法でエラーを回避することができました。
moduleNameMapper
を設定ファイルに記述する
Jestの設定に追加します。
今回は
@react-native-firebaseと名前のつくモジュール全ての参照をfirebaseMock.js
というモックに指定しています。
"jest": {
"moduleNameMapper": {
"@react-native-firebase/*": "<rootDir>/jest/mocks/firebase/firebaseMock.js"
},
モックファイルを作成する
先ほど指定したディレクトリ(ファイル構造は別になんでもいい)にモックファイルを作成します。
exportしてモジュールとして利用できさえすれば、特に中身のない空コンポーネントで良いと思います。
export default () => ({
log: (message) => {},
recordError: (err) => {},
});
まとめ
transformIgnorePattern
を利用して完全無視させる方法も良いのですが、moduleNameMapper
を設定した方がモックモジュール内でアレコレすることも必要に応じて可能になります。
状況によってはこちらの方が便利かもしれません。
Author And Source
この問題について(【Jest】トランスパイルできないモジュールをモック化する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/ShinKano/items/d5d6ee0fdef823d075bb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .