jestのテストコード側で特定の例外を発生させて、機能側でその例外をキャッチ


js、tsの例外キャッチについて

javaみたいに直接例外の名前を指定して、

anime-suko.java
} catch (IOException ioe) {

みたいに指定できない。

普通、js、tsで例外処理を書くときは、こんな感じになる

anime-suko.ts
try {
    //いろいろ
} catch (err) {
    console.error(err);
}

だけど、処理によっては、特定の例外をキャッチさせたいときがある。

方法

●機能側のコード
➡機能側で例外をキャッチするには、こうなる

anime-suko.ts
try {
    //いろいろ
} catch (err) {
    if (err.message === 'GoneException') {
        //なんかいろいろ
    }
}

●テストコード
➡以下のように、mockImplementation()を使うことで、モック関数のデフォルトの実装を定義できる。今回は、2回目の処理呼び出しの際に例外を発生させるようにしている。
公式ドキュメントはこちら
https://jsprimer.net/basic/error-try-catch/

anime-suko.test.ts
await jest
    .spyOn(pushModule, 'pushParams')
    .mockReturnValueOnce(Promise.resolve())
    .mockImplementation(() => {
      throw new Error('GoneException')
    })

感想

自分はjavaは研修以外で勉強してないので、javaだとテストコードの書き方分からん。JUnitを用いたテストの流れは見たことあるけど、jestに比べるとめっちゃ面倒で分かりにくい気がするンゴ。。。

javascriptだと、nodeを考えると便利なモジュールを使いまくって、テストコードも書きやすいし、何か実装で困ったら、このモジュール使ったらええやんみたいに解決できることが多い。