㊙️

TypeScript + Jestでプライベートプロパティの異常系テストを書く

2021-08-29

TypeScript を使った Jest において、あるオブジェクトのプライベートプロパティにアクセスしたいときは、クラス自体をas anyでキャストしてしまうという無理やりな方法で対処する。(他にいい方法があれば教えて欲しい)

class Car {
  constructor(private name: string) {}
  showName() {
    console.log(this.name);
  }
}

test("The name is correct", () => {
  const car = new Car("GMC");
  expect((car as any).name).toBe("GMC");
});

ちなみに、読み取りではなく書き換えを行いたい場合は、同じくas anyを使う方法でもよいが、Object.definePropertyを使う方法もある。

test("The name is correct", () => {
  const car = new Car("GMC");
  // または(car as any).name = "CHEVROLET";
  Object.defineProperty(car, "name", { value: "CHEVROLET" });
  expect((car as any).name).toBe("CHEVROLET");
});