Jestでデバッグ実行時に特定のテストケースの時だけ実行を止める方法
この記事はCommune Advent Calendar 2024シリーズ1の14日目の記事です。
背景
Jestで特定のテストケースだけデバッグ実行したい場合、VS CodeやJetBrainsのIDE(WebStormなど)では簡単に特定のテストケースだけデバッグ実行することができます。しかし、describe.each
やtest.each
を使ってテストを実行する場合JetBrainsのIDEではそれらの中の個別のケースだけを実行することはできませんこのためtest.each
の中の特定のテストケースの時だけデバッグ実行したい場合に他のケースをコメントアウトするか、ブレークポイントで愚直にテストしたいケースが来るまでスキップするなどの手間がかかります。
この問題を解決するために特定のテストケースの時だけ実行を止める方法を調べました。
解決策
expect.getState().currentTestName
を呼ぶと現在実行中のテストケース名を取得可能です。これを使って条件付きブレークポイントで特定のケースだけ止めることができます。条件付きブレークポイントは入力した式を評価した結果がTrueの時だけ実行を止めるブレークポイントです。
条件付きブレークポイントはVS Code、JetBrains IDEどちらもブレークポイントを設定する箇所で右クリック(セカンダリクリック)して出てきたポップアップメニューから設定可能です。
VS Codeで条件付きブレークポイントを設定する方法は次の動画の通りです。
JetBrains IDEで条件付きブレークポイントを設定する方法は次の動画の通りです。
今回の例では設定した条件はテスト名そのままとしましたが、条件付きブレークポイントではjavascriptの評価式を利用できるためもっと複雑なルールで止めることも可能です。
// 2つのケースの時だけ止める
['.add(1, 2)', '.add(2, 1)'].includes(expect.getState().currentTestName)
// 第二引数が2の時だけ止める
expect.getState().currentTestName.match(/^\.add\(\d, 2\)/)
Discussion