Skip to main content

Jestのテストケースをリファクタリングする6つのステップ

著者

2019年9月4日

0 分で読めます

Jestのあまり知られていない機能の1つに、テスト失敗時にコンソールへ表示されるアサーションエラーの処理方法をカスタマイズできる機能があります。キーが想定どおりに存在することを確認するため、オブジェクトをプログラムでループ処理する必要がある次のテストコードを見てみましょう(expect関数を使用します)。

JavaScriptファイルに対応するアプリケーションクラスがあるかを確認するJestテストを表示した、暗色のコードエディター。

テストの書き方に問題はありません。では、チームの開発者がコードを変更した場合を考えてみましょう。ある箇所に新しいファイルを追加したものの、同じプロジェクト内の別の重要な箇所(正しくエクスポートされていることの確認など)に追加し忘れてしまいました。

次にテストを実行すると、失敗します。しかし、ほとんどの人には原因がすぐにわからないでしょう。コードに不慣れなら、何が壊れたのかさえわからないかもしれません。試してみてください。

Jestのテスト失敗を表示するダークテーマのコードエディター。「validatorsをエクスポートする必要がある」というテストで、Received: undefinedと13行目のアサーションエラーが示されています。

そこでJestでは、expectとともにtoHaveProperty()を使うことも求められます。次のようになります。

ファイル名ごとにクラス名を生成し、期待されるプロパティをテストするJavaScriptを表示した、ダークテーマのコードエディター。

これでテストが失敗したとき、少なくともどのプロパティが欠けているかはわかりやすくなります。それでも次のスクリーンショットのように、まだ少しわかりにくいですね。どうすればよいでしょうか?

すべてのバリデータークラスをindex.jsからエクスポートする必要があると示すJestのテスト失敗が表示された、ダークテーマのコードエディター。

この時点では、すでに付いている注釈だけでも十分かもしれません。ご覧のとおり、テスト名から内容は明らかです。ただ、失敗するテストケースは1つしかなく、テストのトレースを見ても、どのバリデーターが使われたのかを明確に判断できません。

コードをリファクタリングしましょう。

index.jsからバリデータークラスがエクスポートされていることを検証するJestテストを表示した、ダークテーマのコードエディター

これで、テストが成功しても失敗しても、何をテストしたのか、何が失敗したのか、そしてその理由が、ずっと明確で直感的にわかるようになりました。

app.test.js内のバリデーターのJestテストが成功したことを示すターミナル出力。ValidateHost.jsとValidateHttps.jsを含む。

ずっとよくなりました! ???


私と同じくらいJestが好きなら(?)、こちらの記事もぜひご覧ください。

Webセキュリティにも関心があれば、The Secure DeveloperのSlackコミュニティ、またはお好みであればTwitterでぜひお話ししましょう。

カテゴリー:

続きを読む

Live Stream

Remediation Agentsの謎を解く:脆弱性の発見より修正が重要な理由

SnykのRemediation Agentが、セキュリティインテリジェンス、修正による影響分析、検証を活用して、脆弱性をマージ可能なプルリクエストに変える方法をご紹介します。

feature ai ide dark
Blog

Evo Agentic AppSecの初公開:エージェントによる修正と悪意あるコードへの防御

Snyk初のAgentic AppSec機能をご紹介します。脆弱性を自律的に修正するRemediation Agentと、リスクのあるパッケージがリリースされる前に阻止するMalicious Code Defenseです。

feature insights context
Blog

keyv npm侵害の実態:preinstallマルウェア、信頼された来歴、IDEフック

keyv 6.0.0と関連するnpmリリース10件に、インストール時に実行されるマルウェアが含まれていました。影響を受けるバージョン、ハッシュ、検出手順、安全な修復の順序を解説します。