Open9

Jest の基本: Jest で Unit Testを作成する

まさぴょんまさぴょん

JestのbeforeAll と beforeEachの違いについて

  • beforeAll: 最初に1回実行される、その後に各itの処理が走る
  • beforeEach: 配下のitの直前に毎回実行される
まさぴょんまさぴょん

Jestでの曖昧な比較 (expect.arrayContaining, expect.objectContaining など)

expect.objectContainingは、Jestの非対称マッチャーの一つで、オブジェクトが特定のプロパティとその値を含んでいるかを検証する際に使用します。
これにより、オブジェクト全体を比較することなく、部分的な一致を確認できます。

使用例:

const received = {
  id: 1,
  name: 'Taro',
  age: 30,
};

expect(received).toEqual(
  expect.objectContaining({
    id: 1,
    name: 'Taro',
  })
);

上記の例では、receivedオブジェクトがidプロパティに1nameプロパティにTaroを持つことを確認しています。ageプロパティの有無や値は検証対象外となります。

主な特徴:

  • 部分一致の検証: オブジェクト全体ではなく、特定のプロパティとその値の存在を確認できます。
  • 柔軟なテスト: 動的に変化するプロパティを無視し、重要な部分のみを検証する際に有用です。

詳細な情報や他の非対称マッチャーについては、Jestの公式ドキュメントをご参照ください。

参考・引用

https://qiita.com/pirosikick/items/cb9419a1233e8f316b88#expectobjectcontaining

https://jestjs.io/ja/docs/expect

まさぴょんまさぴょん

Error Throw 評価について

Error Throw 評価で、次のような実装が効率的である。

it("xxxxxFuncが失敗した場合、エラーを返すこと", async () => {
  jest.spyOn(TestUtils, "xxxxxFunc").mockRejectedValue(new Error(""));

  const req = new xxxxxReq(
    xxxxx.xxxxxId,
  );

  await expect(service.xxxxxFunc(req)).rejects.toThrowError(
    expect.objectContaining({
      message: ErrorCode.XXXXX_XXXXX,
      status: 500,
    }),
  );
});

処理ポイント:

  • 関数呼び出しの回数を削減: service.xxxxxFunc の呼び出しを一度だけにして、コードの効率性を向上させました。
  • エラーアサーションの簡素化: toThrowErrorexpect.objectContaining を使用し、エラーオブジェクトの特定のプロパティをアサートしています。これにより、エラーの型とプロパティを一度に確認できます。