背景
jestでspyOnとかでモックするとき基本はメソッドをexportさせる必要がある。
しかし、privateなメソッドの場合それができない。
privateであるべきメソッドをモックのためだけにexportつけるのもアレだし、1つのファイルからしかアクセスされないのに別ファイルにしてexport対象なメソッドに無理やりするのもアレなのでなんとかしたい
改善方法
以下のようにrequireActualで内容持ってきてindexMock変数に入れている。テスト対象メソッドの戻り値を指定して、indexMock経由でテスト対象メソッドを呼びます。
※「testHelper」はexportをつけないテスト対象メソッドをjestで実行するようにするための仕組みのプログラムで持ってきていますがここでは割愛します。
hoge.ts
const indexMock = jest.requireActual(
'../../src/フォルダ名/index'
)
indexMock.hoge = jest.fn().mockImplementation(() => {
return 任意の返却値
})
const actual =
indexMock.testHelper.テスト対象メソッド(引数)
// 判定
expect(actual).toStrictEqual(任意の期待値)
これで、privateなメソッドもモックできた。