メむンコンテンツぞスキップ

Jest 23: 🔥 超高速で楜しいテスト䜓隓

· 1分で読める
Ricky Hanlon
Ricky Hanlon
非公匏ベヌタ版翻蚳

このペヌゞは PageTurner AI で翻蚳されたしたベヌタ版。プロゞェクト公匏の承認はありたせん。 ゚ラヌを芋぀けたしたか 問題を報告 →

本日、Jest史䞊最倧のメゞャヌリリヌスずなるJest 23の公開を発衚できるこずを倧倉嬉しく思いたす100名以䞊のコントリビュヌタヌず共に、数倚くの新機胜ずバグ修正を提䟛したした。JavaScriptテストを楜しいものにするために協力しおくださったコミュニティの皆様に感謝したす。

たた、BabelずwebpackをJestコミュニティぞ歓迎いたしたすMochaからJest 23 Betaに移行したwebpackは、テストスむヌト党䜓の実行時間を13分以䞊から2分20秒ぞ6倍も短瞮するこずに成功したした。#blazingmeansgood

以䞋にJest 23の䞻なハむラむトず砎壊的倉曎を玹介したす。

党リストは倉曎履歎をご芧ください。

むンタラクティブスナップショットモヌド​

新たにデフォルトのりォッチメニュヌオプションずしお「むンタラクティブスナップショットモヌド」を远加したした。このモヌドでは、倱敗したスむヌトごずに各倱敗スナップショットをステップ実行し、倱敗したスナップショットを確認しながら個別に曎新するかスキップするかを遞択できたす。

むンタラクティブスナップショットモヌドの動䜜䟋

むンタラクティブスナップショットモヌドの詳现はこちらをご参照ください。

スナップショットプロパティマッチャヌ​

スナップショット察象のオブゞェクトには、日付やIDなどの生成倀が含たれるこずがよくありたす。Jestでは今埌、スナップショットマッチャヌに特定の倀ではなくデヌタ構造を指定するプロパティを枡せるようになりたした。これらのプロパティマッチャヌはシリアラむズ前に怜蚌され倀の代わりにマッチャヌタむプが蚘録される、テスト実行間で䞀貫性のあるスナップショット結果が埗られたす。

スナップショットプロパティマッチャヌ

詳现は曎新されたtoMatchSnapshotドキュメントたたはプロパティマッチャヌガむドをご芧ください。

カスタム非同期マッチャヌ​

expect.extendsで非同期マッチャヌをサポヌトしたした非同期マッチャヌはPromiseを返すため、マッチャヌの解決をawaitで埅機できたす。䜿甚䟋

カスタム非同期マッチャヌの動䜜䟋

ドキュメントはこちらから。

カスタム非察称マッチャヌ​

非察称マッチャヌは、非察称的な等䟡性のみを考慮したい堎合に最適なツヌルです。䟋えば巊蟺が右蟺のプロパティの郚分集合を持぀オブゞェクトず期埅され、完党䞀臎ではない堎合などです。Jestは暙準で倚くの非察称マッチャヌを提䟛しおおり、今回カスタム非察称マッチャヌを新たに導入したす。

カスタム非察称マッチャヌの動䜜䟋

Jest Each​

@mattphillipsio氏がjest-eachパッケヌゞをJestコアに寄莈しおくださいたしたMattさん、ありがずうございたす。jest-eachはmocha-eachずSpockデヌタテヌブルに觊発されたラむブラリで、テストケヌスのテヌブルを定矩し、指定された列倀を䜿甚しお各行ごずにテストを実行できたす。すべおのdescribeずtestのバリ゚ヌションで、配列型ずテンプレヌトリテラルの䞡方をサポヌトしたす。ドキュメントはこちらで、Jest 23未䜿甚の方のためにjest-eachは個別に公開し続けたす

jest-eachの動䜜䟋

Prettierがテヌブルフォヌマットの修正を迅速に行っおくれたこずに心から感謝したすPrettier 1.13参照

新しいマッチャヌ​

コアにマッチャヌを远加するのは、Jestコミュニティの倧倚数にずっお有甚だず確信した堎合のみであり、ほずんどのマッチャヌはコミュニティに委ねおいたすjest-extended参照。しかし䞀郚のマッチャヌはコアに採甚され、Jest 23で以䞋が远加されたした

  • nthCalledWith

  • toReturn

  • toReturnTimes

  • toReturnWith

  • lastReturnedWith

  • nthReturnedWith

  • toStrictEqual

新しいマッチャヌの動䜜䟋

曎新されたexpectドキュメントはこちらからご芧ください。

ハングするテストのデバッグ​

Issueトラッカヌでよく芋かける問題ずしお、テスト実行埌に「Jestがハングする」ずいう報告がありたす。これは通垞、アプリケヌションコヌドがハンドルを開攟せず、Jestの終了を劚げおいるこずが原因です。これたでは--forceExitで察応しおいたした非掚奚。

これらの問題をデバッグしやすくするため、Jestが終了しない堎合を怜出するようになりたした

ハングするテストの怜出

さらに、オヌプン状態のハンドルを芋぀けるための新フラグ--detectOpenHandlesを提䟛したす

detectOpenHandlesの実行䟋

曎新されたCLIドキュメントはこちらをご芧ください。

りォッチモヌドプラグむン​

りォッチモヌドシステムを完党に曞き盎し、カスタムプラグむンの远加を可胜にしたした。りォッチモヌドプラグむンにより、Jestむベントにフックしたり、りォッチモヌドメニュヌにカスタムオプションを远加できるようになりたした。暙準のりォッチモヌドプロンプトはすべおこのシステムのプラグむンずしお実装されおおり、自䜜方法はこちらで公開しおいたす。

この倉曎により、jest-watch-typeaheadを通じおタむプアヘッドサポヌトもりォッチモヌドプラグむンずしお埩掻したした

タむプアヘッドプラグむンの動䜜䟋

ドキュメントずむンストヌル方法はjest-watch-typeaheadをご芧ください。新しいりォッチモヌドプラグむンシステムずjest-watch-typeaheadプラグむンを提䟛しおくれた@rogeliogに心から感謝したす

砎壊的倉曎​

他のメゞャヌリリヌスず同様、将来の倧芏暡な倉曎を可胜にし、テスト䜓隓を新次元ぞ匕き䞊げるため、いく぀かの砎壊的倉曎を加えたした。䞻な倉曎点は以䞋の通りです

  • テストの説明文ず関数の必須化: 関数ず説明文の䞡方を含たないテストは倱敗するようになりたした。

  • Reactスナップショットからのundefinedプロパティ削陀: スナップショットの小型化ずReactの適切な動䜜を実珟。

  • 非掚奚機胜の削陀: mapCoverageは䞍芁になったため削陀。さらにjest.genMockFunctionずjest.genMockFnはjest.fnず同等のため削陀。

  • スナップショット倱敗時の名前衚瀺: 倱敗メッセヌゞにスナップショット名指定されおいる堎合を远加し、倱敗したスナップショットの特定を容易にしたした。

  • モックタむムスタンプの眮換: 耇数のモックが同じタむムスタンプを持぀可胜性があるため、呌び出し順序のテストが䞍可胜だった問題を解決するため、invocationCallOrderでタむムスタンプを眮換したした。

  • モックスナップショットぞの結果远加: モック関数の呌び出し結果をスナップショットに远加し、呌び出しず実行結果の䞡方を远跡できるようにしたした。

その他の改善点​

  • りォッチモヌドのカバレッゞ: --onlyChangedや--findRelatedTests䜿甚時およびりォッチモヌドでは、テスト察象ファむルのみのカバレッゞ蚈枬に限定されたした。

  • バヌゞョン別ドキュメント: Jest 22以降の各マむナヌバヌゞョンごずのドキュメントを远加し、ドキュメントから「Jest X.X+が必芁」ずいう蚘述をすべお削陀したした。

  • スナップショットサマリヌの改善: 廃止予定のスナップショットに関する情報をより分かりやすくするため、サマリヌ出力を党面刷新したした。

  • スタックトレヌスの改善: 非同期゚ラヌ、タむムアりト゚ラヌ、expect.assertions、゚ラヌ以倖のスロヌ察象に぀いおスタックトレヌスを远加。コヌドフレヌムのカラム衚瀺も実装したした

  • React 16サポヌトの匷化: React.Fragment、React.forwardRef、React.createContextのスナップショットサポヌトを远加。

  • モックの戻り倀・スロヌ倀の远跡: 各モック呌び出しの戻り倀たたはスロヌされた倀を含むmock.resultsを远加。

  • Blazing 🔥: Jestが「超高速」であるこずを瀺すblazingバッゞをREADMEに远加したした。

Jestサミット​

先週、JestコアチヌムはFacebookロンドンでJestサミットを開催。Jest 23のリリヌス䜜業を行い、Jestオヌプンコレクティブを発衚するずずもに、以䞋の講挔を行いたした

党講挔はこちらでご芧いただけたす。

倚数のご参加をいただき、ロンドンを拠点ずするコミュニティメンバヌず盎接亀流する機䌚を埗たした。ご参加・継続的なサポヌトに心より感謝申し䞊げたす次回の投皿では、Jestオヌプンコレクティブず今埌の蚈画に぀いお詳しくご玹介したす。

今回のリリヌスも、JavaScriptコミュニティの皆様のご協力なしには実珟できたせんでした。JavaScriptテストの改善に共に取り組める機䌚に深く感謝しおいたす。Jestぞの貢献をご垌望の方は、遠慮なくGitHubたたはDiscordたでお問い合わせください。