メインコンテンツへスキップ

Jest 16.0: 高速化されたCLIとコミュニティアップデート

· 1分で読める
非公式ベータ版翻訳

このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →

前回のメジャーリリースから1ヶ月が経ち、それ以来Jestに大幅な改良を加えてきました。今回のメジャーリリースでは、使用しているスナップショット形式を更新するため、Jestをアップグレードする際にはスナップショットの更新が必要になる可能性があります。このような変更は軽々しく行うものではなく、頻繁に発生することもないと考えていますが、フォーマットを随時改善していくことは必要だと判断しました。

強化されたCLI

reporter

Jest 16では、実行中のテストを表示する新しいレポーターインターフェースを導入しました。これにはライブサマリーと、過去のテスト実行から推定した実行時間に基づくプログレスバーも含まれます。また、さまざまなカラースキームでの表示を改善し、CLI出力の見やすさを向上させました。前回の実行で失敗したテストがある場合、Jestは常にそれらのテストを最初に実行し、ユーザーに迅速に有用な情報を提供します。

さらに、多くの便利な新機能を追加しました:

  • 新たなCLIフラグを追加: --testNamePattern=pattern または -t <pattern> オプションにより、テスト内で it.onlyfit を使うのと同様に、コマンドラインからテストをフィルタリングできるようになりました。

  • 以前失敗したテストを常に最初に実行。

  • テストファイルのフィルタリングを容易にするため、jest <pattern> で大文字小文字を区別しないように変更。

  • ウォッチモード中にテスト実行を中断可能に。テスト実行中にウォッチモード用の入力キー(aopq または enter)のいずれかを押すと、実行を中止して新たに開始できます。

  • --bail フラグがウォッチモードでも機能するようになりました。失敗テストの優先実行と組み合わせることで、ウォッチモードが大幅に高速化された感覚になります!

  • jsx 拡張子のファイルとテストを自動認識するようになりました。

  • 重複する手動モックファイルについて警告を表示し、BabelでコンパイルされたESモジュールの自動生成モックを改善。

  • テスト間ですべてのモックをクリアする jest.clearAllMocks 関数を追加。

  • moduleNameMapper 使用時のモジュール解決を改善。

  • 最後に、指定されたファイルに関連するテストを実行する --findRelatedTests <fileA> <fileB> CLIオプションを追加。テストが関連付けられているファイルセットのみを実行したい場合のpre-commitフックとして特に有用です。

ウォッチモードでテスト実行を中断した際のJestの様子: watch

スナップショットの更新

Jestのスナップショット実装を完全に書き直しました。新しい jest-snapshot パッケージは、他のテストランナーとの統合を容易にする構造になり、React Storybookとの連携など新たな可能性を広げます。また、スキップまたは失敗したテストを含むファイル内のスナップショットを廃止済みとマークしないように変更し、スナップショット形式にもいくつかの改良を加えました:

  • スナップショットの将来的な変更を最小化するため、オブジェクトと配列の末尾にカンマを付けて出力するよう変更。

  • スナップショットから関数名を削除。Nodeのバージョン差異やカバレッジ計測で問題を引き起こしていたためで、関数名の変更をユーザーに表示することは有用な情報ではないと判断しました。

  • ファイル内で自然なソート順でスナップショットを並べ替えるよう変更。

Jest 16へのアップグレード時の差分表示例: snapshots

テストライブラリの更新

Jasmineアサーションから新しいJestマッチャーへの移行が完了しました。新たに3つのマッチャーを追加:toBeInstanceOftoContainEqualtoThrowErrorMatchingSnapshot。スパイ/モック用マッチャー toHaveBeenLastCalledWithtoHaveBeenCalledWithlastCalledWithtoBeCalledWith のエラーメッセージをより読みやすい形で改善。すべてのアサーションを書き直して独立パッケージ化したため、今後はスタンドアロン化を進め、Jest外でも他のテストフレームワークに統合可能にする予定です。

コミュニティ要望に応え、多数のエイリアスを追加。単一テストに集中させるには it.only または test.only が使えるようになり(従来の fit も継続利用可)、テストスキップには it.skip または test.skip が利用可能(xit も継続利用可)。ネットワーク/DBアクセスを含むテストでは、並行実行を定義する test.concurrent が有用です。

最後に、chaiのような別のアサーションライブラリで expect グローバルを上書きしたい場合、setupTestFrameworkScriptFile 設定オプションで実現可能になりました。

コミュニティアップデート

先月はJestのスナップショットテスト機能や移行方法、テスト作成入門に関する記事が多数発表されました。Jestとスナップショットテストの仕組みを解説するライブ動画も実施:

スナップショットテストに関する記事の中でもJestチームが共感したのは「Jestスナップショットテスト: 第一印象」。Benの指摘する3つの核心:

  1. スナップショットテストは従来型テストの代替ではなく補完である

  2. 健全なコードレビュープロセスと組み合わせて初めて真価を発揮する

  3. 自動モッキングとの相性が極めて良い

記事全文の精読を強く推奨します。BenはJestがスナップショットテストを開発した真意を見事に説明しています。重要なのは、既存テストを置換するためではなく「従来テストが書かれなかったコード」をカバーする手段として設計した点。Reactコンポーネント・CLI出力・エラーメッセージなどには効果的ですが万能ではありません。Jestの目標は、パフォーマンスや保守性を損なわずに、効果的なテストを書くための多様な選択肢を提供することです。

その他のスナップショットテスト関連ハイライト:

Redux自体がJestを採用しました。またMax Stoiberがreduxコードのテスト方法に関するチュートリアルを、Semaphore CIがMobXテストの書き方ガイドを公開しています。create-react-appではJestがデフォルトで組み込まれています。Kent C. DoddsはJest入門に役立つegghead.io動画シリーズも制作しています。

他のテストランナーをお使いの方には、Kenneth Skovhusが開発した素晴らしいjest-codemodsライブラリが変換作業を自動化します。CodemodsはJestの適合性を迅速に評価できる強力なツールです。ぜひお試しください!

完全な変更履歴はGitHubで確認できます。Jest 16は真のJavaScriptコミュニティの結晶であり、プロジェクトの貢献者は220名を超えました。このプロジェクトをより良いものにするために協力してくださった皆様一人ひとりに心から感謝します。