🛑

Jestでデバッグ実行時に特定のテストケースの時だけ実行を止める方法

2024/12/14に公開

この記事はCommune Advent Calendar 2024シリーズ1の14日目の記事です。

背景

Jestで特定のテストケースだけデバッグ実行したい場合、VS CodeやJetBrainsのIDE(WebStormなど)では簡単に特定のテストケースだけデバッグ実行することができます。しかし、describe.eachtest.eachを使ってテストを実行する場合JetBrainsのIDEではそれらの中の個別のケースだけを実行することはできませんこのためtest.eachの中の特定のテストケースの時だけデバッグ実行したい場合に他のケースをコメントアウトするか、ブレークポイントで愚直にテストしたいケースが来るまでスキップするなどの手間がかかります。
この問題を解決するために特定のテストケースの時だけ実行を止める方法を調べました。

解決策

expect.getState().currentTestNameを呼ぶと現在実行中のテストケース名を取得可能です。これを使って条件付きブレークポイントで特定のケースだけ止めることができます。条件付きブレークポイントは入力した式を評価した結果がTrueの時だけ実行を止めるブレークポイントです。

条件付きブレークポイントはVS Code、JetBrains IDEどちらもブレークポイントを設定する箇所で右クリック(セカンダリクリック)して出てきたポップアップメニューから設定可能です。

VS Codeで条件付きブレークポイントを設定する方法は次の動画の通りです。
VS Codeで条件付きブレークポイントの設定

JetBrains IDEで条件付きブレークポイントを設定する方法は次の動画の通りです。
JetBrains IDEで条件付きブレークポイントの設定

今回の例では設定した条件はテスト名そのままとしましたが、条件付きブレークポイントではjavascriptの評価式を利用できるためもっと複雑なルールで止めることも可能です。

// 2つのケースの時だけ止める
['.add(1, 2)', '.add(2, 1)'].includes(expect.getState().currentTestName)

// 第二引数が2の時だけ止める
expect.getState().currentTestName.match(/^\.add\(\d, 2\)/)
コミューン株式会社

Discussion