UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Jest】throwされたエラーをテストしたい

Jestでthrowされたエラーをテストしたく調べたのでメモ

jestjs.io

これがドキュメントにあった使い方

rejectされたpromiseの理由を取り出すには .rejectsを使用する

// .rejectsを使う
it('tests error with rejects', () => {
  expect.assertions(1);
  return expect(user.getUserName(3)).rejects.toEqual({
    error: 'User with 3 not found.',
  });
});

// async/awaitを使う方法もある
it('tests error with async/await and rejects', async () => {
  expect.assertions(1);
  await expect(user.getUserName(3)).rejects.toEqual({
    error: 'User with 3 not found.',
  });
});

toEqualを使っているが、Errorを継承したカスタムエラークラスにマッチするかをテストしたい

カスタムエラーについて
【システム開発】JavaScriptのError を拡張する - UGA Boxxx

この場合は、.rejects.toEqualの代わりに.rejects.toThrowErrorを使うのが良さそう jestjs.io

こんな感じでテストできた

  test("対応していない通貨", async () => {
    await expect(sut.findByCurrency("aaa")).rejects.toThrowError(
      new CustomError("対応していない通貨です。"),
    );
  });