Jestのバージョン 29.5.3
class Hoge{
private validate(start_unix: number, end_unix: number, ids: (number | string)[]): boolean {
// 色々バリデーションの処理
return true
}
}
Hogeクラスにvalidate()というメソッドがありますが、テストだとこのバリデーションを使いたくないという場合、validateのモックを作る場合があると思います。
テストコードは次の通り
test('Hoge without validate', () => {
const hoge = new Hoge()
const spy = jest.spyOn(hoge, 'validate')
.mockImplementation(() => true);
}
しかし、これだと次のようなエラーが出てしまいます。
No overload matches this call. Overload 1 of 3, '(object: Hoge, method: never): SpyInstance', gave the following error.
なんか引数とかの指定が悪いのかな?とか思ってしまいますが、これはspyOnの対象のメソッドがprivateだとこのエラーになるみたいです。
「じゃー、対象のメソッドを public にしよう!」
ではなくて、めちゃ簡単にこれは解決できます。
jest.spyOn()の1個目の引数で呼び出すインスタンスを、as any で呼べばよいです。
const spy = jest.spyOn(hoge as any, 'validate')
.mockImplementation(() => true);
下記で教えて頂きました。┌o ペコッ ありがたい!
https://stackoverflow.com/questions/62171602/testing-private-method-using-spyon-and-jest