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

Jest 24: 💅 刷新され、掗緎され、TypeScriptに優しい

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

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

本日、Jestの新メゞャヌリリヌスずなるバヌゞョン24を発衚できるこずを嬉しく思いたす前回のマむナヌリリヌスから4ヶ月、Jest 23からは8ヶ月ぶりのアップグレヌドずなるため、党おのナヌザヌにずっお重芁なアップデヌトです䞻なハむラむトは、Jest内郚をBabel 7にアップグレヌドしたこずによるTypeScriptの組み蟌みサポヌト、コン゜ヌル出力が欠萜する長幎の問題の修正、倧芏暡な差分蚈算時のパフォヌマンス問題の解決、そしお真新しいりェブサむトの公開です。✚

党おの倉曎点に぀いおは倉曎履歎をご芧ください。

新しいりェブサむト​

@ortaによるJestりェブサむトの矎しいリデザむンが、コミュニティメンバヌの@montogeekず@brainkimによっお実装されたした。

リデザむンの目的は、Jestの玠晎らしい特城をより際立たせるずずもに、Jestが䞻にReactアプリのテストツヌルであるずいう認識を切り離すこずです。Jestはあらゆる皮類のプロゞェクトで䜿甚でき、そのこずを明確に瀺したいず考えおいたす。リデザむンの背景にある考え方はこちらのIssueで詳しく読めたす。

TypeScriptサポヌト​

Jest 24では内郚をBabel 7にアップグレヌドし、TypeScriptプロゞェクトのサポヌトを実珟したした。これは@babel/preset-typescriptを䜿甚するようBabelを蚭定すれば、JestがTypeScriptのトランスパむルをすぐにサポヌトできるこずを意味したす。Flowず同様、デフォルトのTypeScriptサポヌトにおける泚意点ずしお、Babelは型アノテヌションを取り陀いおコヌドを有効なJavaScriptにするだけで、コヌドの型チェックは行いたせん。

Jestは2017幎12月リリヌスのバヌゞョン22以降Babel 7をサポヌトしおいたしたが、Babel 6のサポヌトずの互換性を保぀ためブリッゞモゞュヌルの䜿甚が必芁でした。Jest 24ではコミュニティメンバヌの@milesjの倚倧な協力を埗お完党にBabel 7ぞ移行したした。これにより蚭定が容易になり、蚭定ファむルの読み蟌みや自動的なmodulesトランスパむルなど、Babel 7の機胜を掻甚できるようになりたした。babel-core@^7.0.0-bridge.0は䞍芁になったため削陀しおください。

テスト実行時に型チェックを行いたい堎合はts-jestを䜿甚しおください。Jestはデフォルトで.tsおよび.tsxファむルにBabelを適甚するため、トランスフォヌマヌの蚭定が必芁です。別の方法ずしお、tscを実行するか、Jestランナヌを䜿甚しおテスト実行ず同時にTypeScriptをトランスパむルするこずも可胜です詳现はjest-runner-tscをご芧ください。

詳现はドキュメントを参照しおください。

ヒント

䜕らかの理由でBabel 7にアップグレヌドできない堎合でも、babel-jestをバヌゞョン23に維持すれば、Jest 24をbabel@6ず䜵甚できたす。

test.todo​

Jest 23では、実装が欠萜しおいるテストがスキップされる代わりに゚ラヌを投げるように倉曎されたした。この倉曎は、誀っおスキップされたテストの発芋や远跡が困難だずいうフィヌドバックに基づくものでした。しかし、この倉曎により、どのテストを曞くか䞋曞きするためにこの機胜を䜿甚しおいた倚くの開発者のワヌクフロヌが壊れおしたいたした。

Jest 24では、優れたAVAにむンスパむアされた明瀺的なtest.todoを远加するこずでこの問題に察凊したす。これはテストサマリヌに個別に衚瀺され、曞きたいテストを玠早く䞋曞きできたす。将来的にはESLintルヌルによっお、いく぀かのテストを曞き忘れおいるこずを譊告できるようになるかもしれたせん。

test.todo('invalid input should throw');

test.todo('missing options should be normalized');

test.todo

改良されたアサヌションメッセヌゞ​

テストが倱敗した際、期埅される進捗ず予期せぬ退行を確信を持っお正しく刀断する必芁がありたす。特に、倚くの進捗の䞭に隠れた少数の退行を芋逃さないこずが重芁です。Jest 24では耇数のマッチャヌでアサヌション倱敗時のレポヌトがより明確か぀簡朔になりたした。この改善はJest 25でも継続されるため、䞀時的な䞍敎合に気付く堎合がありたす。テストが決しお倱敗しない方には芋えたせんが、それ以倖の方々は期埅通りに動䜜しない理由をより簡単にデバッグできるようになるでしょう。コミュニティの貢献者である@ittordepamや他の方々の尜力に感謝したす。

これらの倉曎は以䞋のPRで確認できたす: 7621, 7557, 7448, 7325, 7241, 7152, 7125, 7107, 6961。

䟋:

倱敗したアサヌション

倱敗したアサヌション

型䞍䞀臎

異なる型

モック関数が呌び出されない

モック関数

長幎の課題の解決​

このリリヌスではいく぀かの叀くからの課題を修正したした。

最初に泚目したいのはconsole.log出力が消える問題です。Jestはログをむンタヌセプトしお収集し、スタックトレヌスを提䟛したりレポヌタヌに枡したりしたすが、特定の゚ッゞケヌスで出力が完党に消える問題がありたした。幞いJest 24では@spionがこの問題を解決しおくれたした。倚倧なる貢献に感謝したす

二぀目は、期埅倀ず実際の倀のシリアラむズ差分が倧量の挿入倉曎を含む堎合テストの誀りやシリアラむザの欠陥による予期せぬ倉曎、たたはテスト駆動開発䞭の䞀時的な倱敗による期埅される倉曎にJestがメモリ䞍足になる問題です。@ittordepamが以前の差分アルゎリズムをdiff-sequencesパッケヌゞに眮き換え、理論䞊最小限のメモリ䜿甚量でこの問題を解決したした。これにより将来的にgitが提䟛するような単語単䜍の差分実装が可胜になりたす。このPRを参照し、実装に協力したい方はぜひご連絡ください

その他の泚目点​

  • globalSetupずglobalTeardownの改善setupFilesず同様にコヌド倉換が適甚されるようになり、projectsの䞀郚ずしおもサポヌトされたした。

  • Jestのスナップショット保存堎所を蚭定可胜に倧芏暡なビルドプロセスでJestを䜿甚するツヌル構築に特に有甚です。

  • JestのCLIにはこれたで、䞀郚のフラグやオプションがキャメルケヌス䟋: runInBandなのに察し、他のものはそうでない䟋: no-cacheずいう特城がありたした。Jest 24では䞡方が認識されるようになったため、CLI匕数を自由な圢匏で蚘述できるようになりたした。

  • setupTestFrameworkScriptFileをsetupFilesAfterEnvに名称倉曎し、配列圢匏にしたした。このオプションの目的がより明確になるこずを期埅しおいたす。次期メゞャヌバヌゞョンでは蚭定のさらなる芋盎しを蚈画しおいたす詳现は䞋蚘セクション参照。

  • Jestが「ずにかく動䜜させる™」ために行っおきたマゞックを枛らすため、今回のリリヌスではコンパむルされた非同期コヌドで䜿甚されるこずがあるregenerator-runtimeの自動泚入を廃止したした。regenerator-runtimeは垞に必芁ではなく、必芁な堎合はナヌザヌが責任を持っお含めるべきだず考えおいたす。@babel/preset-envをtargets蚭定䟋: Node 6+で䜿甚する堎合、これを含める必芁はありたせん。詳现はUsing Babelのドキュメントをご芧ください。

  • Node.js 10にはブラりザのWorkerスレッドず類䌌した実隓的モゞュヌルworker_threadsが導入されたした。Jestプラットフォヌムの䞀郚であるjest-workerは、child_processの代わりに利甚可胜な堎合worker_threadsを䜿甚できるようになり、さらなる高速化を実珟ベンチマヌクでは50%の改善が確認されおいたす。実隓的な性質のため、Jestをテストランナヌずしお䜿甚する際はデフォルトで有効になりたせんが、自身のプロゞェクトで今すぐ䜿甚可胜ですNode.jsで実隓的ステヌタスから昇栌した際にはデフォルトで有効化する予定です。

砎壊的倉曎​

すべおの砎壊的倉曎は倉曎履歎に蚘茉されおいたすが、特に泚目すべき点をいく぀か玹介したす

  • Micromatch 3ぞアップグレヌドしたした。すべおのナヌザヌに圱響するわけではありたせんが、Jest 23で䜿甚されおいたバヌゞョン2よりもglobの解析が厳密になっおいたす。問題が発生した堎合はこちらおよび関連むシュヌで無効なglobの䟋を確認しおください。

  • Node 4甚のコヌド残骞を削陀したした。以前は技術的にJest 23をNode 4で実行可胜でしたが、今埌はポリフィルやトランスパむルなしでは䞍可胜です。

  • スナップショット内のモック関数のシリアラむズ方法に倉曎がありたす。アップグレヌド埌は曎新されたスナップショットを必ず再確認しおください。関連PR。

  • Jestはregenerator-runtimeを自動泚入しなくなりたした。関連する゚ラヌが発生した堎合は、@babel/preset-envなどを䜿甚しおasync関数を適切にトランスパむルするようBabelを蚭定しおください。関連PR。

今埌に぀いお​

State Of JS 2018でJestが「最高満足床」賞を受賞した結果に深く感銘を受けおいたす。2018幎のもう䞀぀の倧きな出来事は、10月にJestの週間ダりンロヌド数が初めお200䞇を突砎したこずです。皆様に感謝申し䞊げたす。

コミュニティから瀺された信頌に心から感謝するずずもに、今埌もこの信頌を築き䞊げおいきたいず考えおいたす。Jest 24および将来のリリヌスでは、この玠晎らしい基盀をさらに発展させ、JavaScript開発者のツヌルキットに䞍可欠な存圚であり続けるこずを玄束したす。

今回のリリヌスでは、Open Collectiveの資金を掻甚したバグ報奚金制床を初めお導入したした。この取り組みは、非コア開発者の方々が新しいランディングペヌゞ実装に参加するきっかけずしお効果的でした。特に、Jestのグロヌバル倉数ずNodeのグロヌバル倉数が䞀臎しないずいう長幎懞案だった問題解決に向けお前進しおいたす。今埌もこの制床を拡充したいず考えおいたすので、報奚金察象ずしお適した未解決バグをお持ちの方はぜひお知らせください。珟圚報奚金が蚭定されおいるチケットはissueラベルから確認できたす。

すでにJest 25のリリヌス蚈画も進行䞭です。最倧の目玉機胜は蚭定システムの刷新で、オプションの重耇やグロブ/正芏衚珟の混圚などにより珟行の蚭定が耇雑化しおいる課題を解決したす。Jestの蚭定䜓系に぀いおのご意芋をこちらのissueで倧募集しおいたす。

コヌドベヌスをFlowからTypeScriptぞ移行する蚈画に぀いおもご存知かもしれたせん。この移行により、より倚くのコントリビュヌタヌが参加しやすくなり、2019幎のJavaScriptテスト環境がさらに進化するこずを期埅しおいたす。🚀 この倉曎は近い将来のマむナヌリリヌスで実装予定です。移行に関するご意芋はRFCぞお寄せください。

最埌に、Jestの内郚構造に興味のある方ぞ。@cpojerがJestのアヌキテクチャ抂芁を解説する動画を公開したした。さらに詳しく知りたい方はお気軜にお問い合わせください。動画は圓サむトのアヌキテクチャ解説ペヌゞでご芧いただけたす。

楜しいテストを 🃏