TypeScript上のjestでprivateなメソッドをモックする
as anyをモックに付けて、privateを無視する。(他により良い方法があれば教えてほしい)
Linterの設定をしていて、as anyで怒られる場合はファイルの頭に
/* eslint-disable @typescript-eslint/no-explicit-any */
を設置して許可しておくと楽。テストで個別に設定するのは大変。
code:typescript
jest.spyOn(wantToMockObject as any, 'targetMethod').mockImplementation();
どういったときに使う
基本的には、privateメソッドは内部で処理されるべき処理群なので、mockするべきではない。
クラスに切り出すレベルでの拡張が行われないけど、処理としては必要なのでprivate methodとして管理している、外部に接続するメソッド等で使える。具体的には、特定の処理内で外部APIに対してfetchを行う処理とか。