Jestで非同期関数がエラーをスローすることを期待する方法


方法1: toThrowを使用する方法 JestのtoThrowマッチャを使用すると、非同期関数がエラーをスローすることを期待できます。以下は使用例です。

test('非同期関数がエラーをスローすることをテストする', async () => {
  await expect(asyncFunction()).rejects.toThrow(Error);
});

上記の例では、asyncFunctionという非同期関数がエラーをスローすることを期待しています。asyncFunctionがエラーをスローしない場合、テストは失敗します。

方法2: try-catchを使用する方法 もう1つの方法は、非同期関数の内部でtry-catchブロックを使用してエラーをキャッチする方法です。以下は使用例です。

test('非同期関数がエラーをスローすることをテストする', async () => {
  try {
    await asyncFunction();
    // エラーがスローされなかった場合はテスト失敗
    expect(true).toBe(false);
  } catch (error) {
    // エラーがスローされた場合はテスト成功
    expect(error).toBeInstanceOf(Error);
  }
});

上記の例では、asyncFunctionがエラーをスローすることを期待しています。エラーがスローされない場合、expect(true).toBe(false)で明示的にテストを失敗させます。

方法3: .toThrowErrorを使用する方法 Jestの.toThrowErrorマッチャを使用すると、エラーメッセージや特定の条件に基づいて非同期関数がエラーをスローすることをテストできます。以下は使用例です。

test('特定のエラーメッセージをテストする', async () => {
  await expect(asyncFunction()).rejects.toThrowError('エラーメッセージ');
});
test('特定のエラー条件をテストする', async () => {
  await expect(asyncFunction()).rejects.toThrowError((error) => {
    // エラー条件をチェックするロジックを記述
    return error instanceof CustomError && error.code === 500;
  });
});

上記の例では、asyncFunctionが特定のエラーメッセージまたは条件を満たすエラーをスローすることを期待しています。

これらはJestを使用して非同期関数がエラーをスローすることをテストするためのいくつかの一般的な方法です。必要に応じて、これらの例をカスタマイズして使用してください。