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

Jest 20: 💖 テストが楜しくなる & 🏃🏜 マルチプロゞェクトランナヌ

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

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

数ヶ月前に発衚したJest 19は䞻芁な新機胜を備えた圓時最倧のリリヌスでしたが、今日公開するJest 20は前バヌゞョンの2倍の倉曎を䌎い、テストランナヌの完党な曞き換えを実珟し、新たなテストAPIを远加しおいたす。この新リリヌスはプロゞェクトのカスタマむズず蚭定に新たな次元をもたらすず同時に、アップグレヌドを驚くほど容易にしたす。「苊痛のないJavaScriptテスト」を超えお、Jestは今や楜しいJavaScriptテスト䜓隓を提䟛しおいるず確信しおいたす。䞻芁な新機胜ず倉曎点を深掘りしおみたしょう

マルチプロゞェクトランナヌず蚭定の倧改革​

これたでJestは䞀床に1぀のプロゞェクトでしか動䜜できたせんでした。これは独自のセットアップず蚭定を持぀耇数の小さなプロゞェクトを扱う堎合、しばしば煩雑でした。Jest 20ではテストランナヌを完党に曞き盎し、単䞀のJestむンスタンス内で耇数のプロゞェクトを同時に実行できるようになりたした。䟋えばReactフロント゚ンドずNode.jsバック゚ンドを同時に扱う堎合などです。こちらはJestがReact、Relay、Yarn、そしおJest自身のテストを同時に実行する様子です

マルチランナヌ

Jestはタヌミナルの瞊スペヌスを節玄するため、初回テスト実行埌に䜿甚ガむドを折りたたむようになりたした。

さらに、Jest内郚の蚭定システムを完党に芋盎したした。蚭定ファむルで指定したオプションをCLI経由で䞊曞きできるようになりたした。同時に、Jestはデフォルトでjest.config.jsファむルを探すように倉曎され、JavaScriptでJest蚭定を定矩できるようになったほか、埓来通りpackage.json経由での蚭定も可胜です。これらの新機胜により、これたで以䞊に匷力な方法でJestを組み合わせられたす。䟋えばmonorepo内の耇数プロゞェクトにたたがるコミットから倉曎ファむルセットを指定し、Jestが実行するテストを特定したい堎合、次のようにCLI匕数を組み合わせられたす

$ jest --projects projectA projectB --listTests --findRelatedTests projectA/banana.js projectB/kiwi.js
[
"projectA/banana.test.js",
"projectB/kiwi.test.js",
"projectB/pineapple.test.js",
]

これは継続的むンテグレヌションCIシステムで特に有甚で、プルリク゚ストごずにテストのサブセットのみを実行し、小さな倉曎ごずに数千のテストファむルを実行するのを防げたす。

最埌に、TypeScript䜿甚時のコヌドカバレッゞを適切にマッピングするようになり、未テストファむルのコヌドカバレッゞをワヌカヌプロセスで実行するこずで、この機胜の倧幅な高速化を実珟したした。

新機胜ず改善されたテストAPI​

より効果的なテスト䜜成を支揎するため、テストAPIに数倚くの远加ず改善を行いたした。これらの改善はすべおコミュニティメンバヌの手によるものだずいう点を匷調しおおきたす

  • 非同期テストの改善 expectにresolves/rejects修食子を远加し、async/Promiseをサポヌトexpect(Promise(
)).resolves.toEqual(
)。ドキュメント参照

  • n個のアサヌションを期埅 既存のexpect.assertions(n)に加え、新しいexpect.hasAssertions()でテストに少なくずも1぀のアサヌションがあるこずを保蚌可胜

  • Lintプラグむン eslint-plugin-jestにvalid-expectルヌルを远加し、expect呌び出し埌にアサヌションが確実に呌ばれるようにしたした。アサヌション呌び出しが欠けたexpect(banana);のようなミスを防止したす

  • Pretty-Formatプラグむン Jestに倚数の新しいpretty-formatプラグむンを远加。Immutable.jsデヌタ構造ずHtmlElementsをアサヌション倱敗時やスナップショットで芋やすく衚瀺

  • カスタム環境 テストファむルのdoc-blockコメントに@jest-environment node|jsdomアノテヌションを远加し、個別テストでデフォルトずは異なるテスト環境を䜿甚可胜に

以䞋は、すべおの新APIが組み合わさっおテスト䜓隓をより楜しくする具䜓䟋です

/**
* @jest-environment node
*/

test('compares apples and bananas', async () => {
expect.hasAssertions(); // Ensure this test has at least one assertion.

await expect(
Promise.resolve(Immutable.Map({apples: 1, bananas: 2})),
).resolves.toEqual(Immutable.Map({apples: 1, bananas: 3}));

expect('banana'); // valid-expect in eslint-plugin-jest will show an error.
});

この䟋では、テスト倱敗時に次のような出力が衚瀺されたす

testing-apis

砎壊的倉曎​

メゞャヌリリヌスごずず同様に、将来の倧芏暡な倉曎を可胜にし、テスト䜓隓を新たなレベルぞ匕き䞊げるため、いく぀かの砎壊的倉曎を行っおいたす。今回私たちは、倧倚数のJestナヌザヌに圱響しないAPIのみを倉曎するよう努めたした

  • Jasmine 2.5のフォヌク: Jasmine本䜓をフォヌクし、Jest独自のテストランナヌの所有暩を取埗したした。これにより将来ナニットテスト䜓隓のあらゆる偎面を改善できたすが、圓面は段階的なリラむトずAPIサヌフェスの瞮小に泚力したす。Jasmine APIが䞍足しおいるためにテストが倱敗する堎合は、jestたたはexpectオブゞェクトで同等の機胜が利甚できるはずです。これに䌎い、倚くのコヌドベヌスで䞀般的に䜿甚されおいないJasmine機胜を削陀したした。

  • CI環境での新芏スナップショット: スナップショットは垞にテストずテスト察象モゞュヌルず共にコミットする必芁がありたす。Jestを倉曎し、CI環境や--ciフラグ指定時には新しいスナップショットを自動保存しないようにしたした通垞掚奚されないこの動䜜を䞊曞きするには--updateSnapshotフラグを䜿甚できたす。

  • Babel-Polyfill: Jestは以前、babel-jest䜿甚時に自動的にbabel-polyfillを読み蟌み、メモリリヌクを匕き起こしおいたした。ほずんどのNode.jsバヌゞョンではbabel-polyfillの読み蟌みは䞍芁なため、この自動読み蟌みを削陀し、代わりに非同期/埅機構文をサポヌトするregenerator-runtimeのみをデフォルトで含めるように倉曎したした。babel-polyfillが必芁な堎合は、セットアップファむルで手動で読み蟌んでください。

その他の改善点​

  • ドキュメント: ベストプラクティスの共有ず効果的なテスト手法の教育は、より良い゜フトりェア開発に䞍可欠です。過去数週間でスナップショットテストFAQ、䞻芁JSラむブラリずの連携ガむド、前述の新機胜に関するドキュメントを远加したした。

  • 翻蚳: Jestドキュメントの翻蚳ぞの協力を呌びかけおいたす。より倚くの方がJestを孊びやすくなるようご協力ください。

  • カスタムレポヌタヌ: reporters蚭定オプションを通じおカスタムテストレポヌタヌをサポヌトしたした。XML圢匏などでのレポヌト生成により、Jestの出力をカスタマむズしたり他のツヌルず統合したりできたす。ドキュメント参照

  • コヌドベヌスの健党性: Jestが迅速に進化できたのは、コヌドベヌスの健党性に倚倧な時間を費やしたからです。Prettierの早期導入、Flowカバレッゞの倧幅向䞊、Jasmineフォヌクによるテストランナヌラむブラリ改善、将来の成功に向けたJest本䜓の倧芏暡リラむトを実斜したした。

  • バグ修正: 垞通り、Jestでは数倚くのバグ修正を行いたした。完党な倉曎履歎はJestリポゞトリで確認できたす。

Jestに関する講挔​

最近、JestコアチヌムずコントリビュヌタヌがカンファレンスでJestずその開発䜓隓に぀いお講挔を始めおいたす

今回も、JavaScriptコミュニティの皆様のご支揎がなければ、このリリヌスを実珟するこずはできたせんでした。JavaScriptテストの改善に共に取り組める機䌚をいただき、心より感謝しおおりたす。Jestぞの貢献をご怜蚎の方は、どうぞお気軜にGitHubやDiscordでお声がけください。