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

Jest 11.0

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

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

本日、Jestはメジャーバージョンアップの方式に移行し、最初のメジャーリリースとなるJest 11.0を発表します。Jestは長年Facebookエンジニアや継続的インテグレーションシステムで使用されており、すでに「1.0リリース」をはるかに超えた状態が続いていました。これはReactチームが行った変更と同様の方針転換です。

Jest 0.9または0.10をご利用中の場合、アップグレードはシームレスに行えます。過去数ヶ月の全変更点はJest 11.0に統合されています。

Jest 11.0の新機能

Babel統合と設定の簡素化

新たにモジュール化されたJestリポジトリ内でbabel-jestが採用され、Jestとシームレスに統合されました。旧バージョンからのアップグレードやJest導入をご検討中の方は、はじめの一歩ガイドをご参照ください。

従来Jestはjest.dontMockなどのAPIを提供し、require関数で後続読み込みされるモジュールのモックを解除していました。典型的なテストコードは以下の形式でした:

jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton is unmocked

しかしES2015のimport文と併用すると、この方法は機能しなくなります。仕様上importはコードブロック先頭に巻き上げられるため、次のようなコードは:

jest.dontMock('LikeButton');
import LikeButton from 'LikeButton';

実際には次の順序で実行されます:

import LikeButton from 'LikeButton'; // This happens before the dontMock call.
jest.dontMock('LikeButton');

その結果、明示的にdontMockを呼び出してもLikeButtonモジュールはモック化されます。

最新版Jestとbabel-jestを併用すると、新APIであるjest.unmockjest.mockjest.disableAutomockjest.enableAutomockの呼び出しは、ES2015のimport文より前にブロック先頭へ巻き上げられます。

jest.unmock('LikeButton');
import LikeButton from 'LikeButton'; // LikeButton is properly unmocked!

(自動)モッキングの改善

Jestの自動モッキング機能に多数の改善とバグ修正を施し、npm3サポートを強化するとともに、新たな手動モッキングAPIを追加しました。自動モッキングを無効化したいという要望に応え、グローバル設定オプションautomockfalseを設定できるようになりました。

手動モックを簡素化する2つの新APIも追加しました。jest.mockは特定テスト用の手動モックファクトリを指定します:

// Implement a mock for a hypothetical "sum" module.
jest.mock('sum', () => {
return (a, b) => a + b;
});

const sum = require('sum');
sum(1, 4); // 5

またjest.fnを追加し、モック関数の作成を容易にしました:

// Create a mock function
const mockFn = jest.fn(() => 42);
mockFn(); // 42
expect(mockFn.calls.length).toBe(1);

パフォーマンス

最近Jestのパフォーマンス改善について報告しました。特に起動時間が改善され、パフォーマンス面では十分な水準に達しています。

Jasmineとテストアサーションの改善

Jestがオープンソース化された当初はJasmine 1を同梱していました。Jestはあらゆるテストアサーションライブラリに対応する設計であり、昨年末の外部コントリビューションでJasmine 2サポートが追加されました。この変更により以前のJasmine版より優れたパフォーマンスとAPIが実現され、Facebookの全JavaScriptテストをJasmine 2へ移行しました。Jest 11ではJasmine 2を新デフォルトとし、Jasmine 1はtestRunner設定オプションで有効化可能です。

Jasmine周りの改善も多数実施しました。Jestのモック関数向けカスタムマッチャーのエラーメッセージが改善され、Jasmineスパイでも同様に機能するようになりました。fitfdescribe,でスキップしたテストは、テスト実行終了時に正しく報告されます。

その他の変更

jest --watch コマンドが刷新され、改善されました。デフォルトでは変更ファイルに関連するテストのみを実行するようになりました。変更のたびに全テストを実行したい場合は jest --watch=all を使用してください。詳細ログ出力も改善され、より有用な警告・エラーメッセージを追加しました。テスト環境をカスタマイズする testEnvironment 設定オプションも追加されました。例えばNodeサービスを構築する場合、jsdom の代わりに特別な node 環境を使用できます。最後に、ウェブサイトと全ドキュメントを完全に書き直しました。

過去数か月の全変更点は CHANGELOG で確認できます。

コントリビューションとJestの将来

過去6か月間、Jestは多くの新規コントリビューターから多大な貢献を受けました。Jestをより良いものにするために協力してくださったオープンソースコントリビューターとFacebook社員の皆様に感謝します。新規コントリビューター: Alexander Juarez, Christian Lentfort, Cristian Carlesso, Dan Abramov, Dmitrii Abramov, Evan Jacobs, James Friend, James Ide, Jeff Carpenter, Joe Lencioni, Michael Diolosa, Nik Graf, Pavel Prokopenko, Pavel Volokitin, Sebastian Mayr, ShihChi Huang。

皆様の支援を得て、今後数か月でJestをさらに改善していきます。現在はReact(Native)テストの改良、強化されたコードカバレッジ対応に取り組んでおり、複数Jestプロジェクトを単一コマンドで実行できる内部テストランナーのオープンソース化も計画中です。