No overload matches this call. Overload 1 of 3, ‘(object: Hoge, method: never): SpyInstance‘, gave the following error.

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


社員旅行で行った台湾で見かけた派手な百合

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です