TypeScript
unittest

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

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)