Posted at

Typescriptでprivateメソッドをテストする

More than 1 year has passed since last update.

Typescriptでprivateメソッドをテストしたかったが単純にメソッドにアクセスしようとすると怒られたので、

どうやったらテストできるか調べてみた。


How

以下の例で見ていく。


hoge.ts

export default class Hoge {

private add(a: number, b: number) number {
return a + b
}
}


hoge.spec.ts

import Hoge from './hoge'

it("returns the addition of two numbers", () => {
const hoge = new Hoge()
expect(hoge.add(1, 2)).toBe(3)
})


テストを実行すると、

src/hoge.spec.ts (5,15): Property 'add' is private and only accessible within class 'Hoge'.

と怒られる。

解決方法は2つあって、


  1. anyにキャストして.hogeでアクセスする

   (hoge as any).add(1, 2)


  1. プライベートなメソッドに["hoge"]でアクセスする

   hoge["add"](1,2)