Jestにおける2016年
このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →
2016年はJavaScriptテストにおいてJestにとって大きな年となりました。この年の前半6ヶ月でJestを書き直し、パフォーマンスとJavaScriptコードテストの開発者体験を大幅に改善する堅固な基盤を構築しました。コードベース全体をFlowで型付けし、Jest自体のた めの数多くの統合テストを構築し、lernaを採用してJestをフレームワークからPainless JavaScript Testingプラットフォームへと進化させました。
新たに作成されたreact-test-rendererにより、ついにreact-nativeコンポーネントのテストが可能になりました。jest-react-nativeプリセット(現在はreact-nativeに直接統合)を通じて、JestはどのReactプロジェクトでもすぐに使えるようになり、create-react-appやreact-nativeプロジェクトでは最初から設定済みです。Jestのコア部分をreact-nativeのパッケージャに統合し、まったく新しいスナップショットテスト機能はJestの外部でも利用されるようになりました:React Storybookでは"storyshots"として統合され、avaのような他のテストランナーでも採用が進んでいます。
pretty-formatプロジェクトは、Jestのスナップショット機能を駆動するためにパフォーマンスを考慮して書き直され、最近Jestのモノレポに統合されました。これは他のテストランナーでも役立っています。現在のJestは、特定のテストフレームワークの実装というよりも、テストに関するさまざまなアイデアとソリューションを集約するプラットフォームへと進化しています。
本年Jestに貢献してくださったすべての方々に深く感謝いたします。オープンソースコミュニティとFacebookの皆様:Dmitrii Abramov、Cristian Carlesso、Dan Abramov、Daniel Lo Nigro、Maxim Derbin、Evan Scott、Forbes Lindesay、Keyan Zhang、そして60名以上の方々です。また、Jest初の公式外部コントリビューターとしてMichał Pierzchała (@thymikee)を歓迎します。彼はリポジトリのissueやPRの管理を素晴らしく行ってくれています。Jestへの貢献を始めたい方は、初心者向けタスクが多数用意されており、Discordチャンネルでいつでもサポートいたします。
repl.it と Jest の統合
Amjad MassadがJestコンテナを構築したため、ブラウザで直接Jestを試せるようになりました。GitHub issue作成時にこれを使用すれば、問題のトラブルシューティングがより迅速に行えます。AmjadとHayaはrepl.itを構築し、教育者、学習者、開発者のために強力でありながらシンプルなツールとプラットフォームを提供することでプログラミングを民主化しています。彼らはまた才能あるエンジニアを募集中です!
コミュニティアップデート
過去6ヶ月で100社以上の企業がJestを採用したことに、私たちは非常に謙虚な気持ちでいます。Twitter、Pinterest、Paypal、nytimes、IBM (Watson)、Spotify、eBay、SoundCloud、Intuit、FormidableLabs、Automattic、Trivago、Microsoftといった企業が、JavaScriptテストのニーズに応じて完全または部分的にJestへ移行しました。このプロジェクトにチャンスを与えてくださり、心より感謝申し上げます。また、カンファレンスやミートアップでJestについて話してくださった 皆様、そしてJestの活用状況についてブログ記事を書いてくださっているすべての方々にも感謝いたします!
過去2ヶ月間にコミュニティで起こったことをご紹介します:
-
Jason BontaとDmitrii Abramovが、Facebookで話題になった「テストピラミッド」を再定義しました。
-
jest-codemodsがMocha、Tape、AvaからJestへの移行を容易に実現
-
Reactチームが15.4.0でreact-test-rendererの改良を発表
-
Orta Theroxが素晴らしいvscode-jest連携機能を開発し、エディタサポートコードをJestに寄贈
-
Pavithra KodmadがFlipkartのJest導入事例を公開し、導入時のヒントを共有
-
Kent C. DoddsがPaypalでのJest移行、Jason BrownもJest移行の経験を執筆
-
Ben McCormickがJestによる時間節約術を解説
-
Eric ClemmonsがスナップショットとStorybookの連携について執筆
-
Edvin EriksonがJestでTAP形式出力を取得する方法を紹介
-
jest-htmlがブラウザ上でのスナップショット差分表示を実現
-
Hacker NewsでJestに関する活発な議論が展開
-
コミュニティがenzymeの将来像について議論を開始
-
Ruben OostingaがchaiとJestマッチャーの併用について執筆
-
Emil OngがフロントエンドのTDDが無意味に感じられる理由を考察
-
Nate HunzakerがJestとNightmareを使ったE2Eテストを解説
-
Matthieu LuxがJestとAngularのシームレスな連携を実証
-
スナップショットテストの目的に関する深い議論が現在進行中
-
Dmitriiが自身のメタルバンドで新曲のミュージックビデオを公開
-
既存コードベースにテストを導入する際にlazyspecがスモークテストを迅速に作成可能
-
Patrick Stapfer氏がvimとJestについてライトニングトークを行いました。
-
Mark Dalgleish氏がスナップショットテストの価値についてコメントしています。
Jest 17 & 18 の新機能、変更点、修正内容
Jestは5年以上前に作成されたフレームワークであり、長年の運用で技術的負債が蓄積していました。このため、必要な頻度よりも多くの破壊的変更を行ってきましたが、これはJestプロジェクトの長期メンテナンス性を確保するために技術的負債を段階的に削 減することが重要だと考えているからです。Jest 17についてはブログ投稿で告知しませんでしたが、過去1ヶ月間にアップグレードしていない場合は変更履歴が参考になるでしょう。
-
破壊的変更:
pitを削除し、代わりにitまたはtestを、mockImplをjest.fn()またはmockImplementationで置き換えました。 -
破壊的変更:
--jsonOutputFileを--outputFileに名称変更しました。 -
破壊的変更:
testRegexを更新しtest.jsおよびspec.jsファイルを含めるようにしました。 -
破壊的変更:
scriptPreprocessorを新しいtransformオプションで置き換えました。 -
破壊的変更:
testResultsProcessor関数で修正後の結果を返すことが必須になりました。 -
潜在的破壊的変更:
snapshotSerializers、setupFiles、transform、testRunner、testResultsProcessorを解決アルゴリズムで適切に解決するよう変更(path.resolveの使用を廃止)。これにより主に<rootDir>がこれらのオプションで不要になりました。 -
追加:
pretty-formatとjest-editor-supportをJestに統合しました。 -
追加:
expect.any、expect.anything、expect.objectContaining、expect.arrayContaining、expect.stringMatchingを追加しました。 -
追加:
--testResultsProcessorをCLIで公開しました。 -
追加:
jest-haste-mapでファイル監視機能を実装しました。 -
追加:
JEST_HIDE_USAGEでwatchモード使用時の利用統計表示を非表示にできるようになりました。 -
追加: 特定の数のアサーションがテスト内で行われることを保証する
expect.assertions(number)を追加しました。 -
追加: スナップショットに名前を付ける
.toMatchSnapshot(?string)機能を追加しました。 -
追加:
toMatchObject、toHaveProperty、toHaveLengthマッチャーを追加しました。 -
追加:
expect.extendを追加しました。 -
追加: カスタムスナップショットシリアライザーのサポートを追加しました。
-
追加: スナップショットとアサーションで大きな差分はデフォルトで折りたたまれるようになりました。完全な差分を表示するには
--expand(または-e)を使用します。 -
追加:
jest.clearAllMocksを置き換えるjest.resetAllMocksを追加しました。 -
追加:
--jsonオプションでファイル内の個々のテスト情報を含めるようになりました。 -
修正:
test.concurrentの未処理Promise拒否問題を修正しました。 -
修正: 3引数で
jest.mockを使用する際のbabel-plugin-jest-hoistの問題を修正しました。 -
修正:
jest-environment-nodeのJSONグローバルが親コンテキストではなくvmコンテキストから取得されるよう修正しました。 -
修正: Jestがbabelからのスタックトレースを出力しなくなりました。
-
修正:
FakeTimers.useTimers()呼び出し時にフェイクタイマーがリセットされるよう修正しました。 -
修正: スナップショット内の正規表現が適切にエスケープされるよう修正しました。
-
修正: 大規模オブジェクトの整形表示を改善しました。
-
修正:
--notify使用時にOS通知に表示されるNaN% Failedの問題。 -
修正: タイミングキャッシュがない初回テスト実行時に、in-band実行ではなく別プロセスで実行されるよう改善。
-
修正:
Map/Setの比較処理。 -
修正:
test.concurrentが--testNamePatternと連携可能に。 -
修正:
.toContainマッチャーの精度向上。 -
修正: react-native上でのプラットフォーム拡張子付きモジュール解決の適切化。
-
修正:
jest-environment-nodeにおけるグローバル組み込みオブジェクトの正常動作を確保。 -
修正: 親コンテキストではなくvmコンテキスト内でのモックオブジェクト生成。
-
修正:
babel-jestにおいて.babelrcがトランスフォームキャッシュキーに含まれるよう変更。 -
修正: hasteモジュールにおけるdocblockパーシングの改善。
-
修正: カバレッジ閾値未達時の終了コード適正化。
-
修正: watchモード時のスクロールバック完全クリア機能を追加。
-
非推奨化:
jest-react-nativeを非推奨化しreact-nativeへ転送する仕様に変更。
2017年前半のJest開発計画
半年前に今後のJest計画を共有しましたが、ほぼ全ての目標を達成できたことを嬉しく思います。今後6ヶ月間の計画は以下の通りです:
-
即時フィードバック: Nuclide連携と、高速化されたwatchモードの改善。
-
開発者体験の向上: 新モッキングAPIとアサーション機能の改善。
-
パフォーマンスとメモリ使用量の最適化: Jestの効率性 分析とリソース管理の強化。
-
スナップショットの改善: スナップショット承認モード、シンタックスハイライト、
react-test-rendererAPIの拡張。 -
ウェブサイト: 公式サイトとドキュメントの刷新、Jestチートシートの追加。
これらの機能について具体的なタイムラインや期間は示さず、全てが実装される保証はありません。実現にご協力頂ける場合は、アイデアをIssueやPull Requestでお寄せください。2017年も共にJestの改善を推進しましょう。
