やりたいこと
Jestを使い、特定のモジュールでrequire()しているjsonファイルをmockしたい
解決方法
package.json
にjest
>moduleNameMapper
を設定し、テスト実行時のみ、mockしたいjsonファイルのパスを書き換える
実装例
以下のモジュールをテスト対象とします
//target.js
const json = require('./required.json');
/** 以降、処理が記載されているとする **/
テスト実行時にtarget.js
がrequire()
するjsonファイルをmock.json
に差し替えたい場合、package.json
に以下の設定を加えます
{
"jest": {
"moduleNameMapper": {
".*/required\\.json$": "<rootDir>/mock.json"
}
}
}
moduleNameMapper
のkeyには、差し替え前のモジュールのパス(正規表現)を、valueには差し替え後のモジュール(mock)のパスを記載します
(valueにある<rootDir>
はpackage.json
のある階層を示すエイリアスです)
上記の設定により、require('./required.json')
で指定したパスがmoduleNameMapper
のkeyとマッチし、対応するvalueのパスに書き換えられて実行されます