JavaScriptテストの第一歩:Jestで'it'と'test'を使ってテストを書いてみよう
Jest における 'it' と 'test' の違い
歴史的な経緯
it
は、BDD (Behavior Driven Development) に基づいたテスト記述スタイルで使用されるキーワードです。 BDD は、テストを記述する際に、ソフトウェアの振る舞いに焦点を当てることを重視します。
Jest における it と test
Jest では、どちらのキーワードを使用しても同じテストを実行することができます。 これは、Jest が内部的に it
を test
に置き換えて処理するためです。
しかし、近年では BDD の人気が高まっており、it
を使用する方が一般的になっています。 多くの Jest チュートリアルやライブラリも it
を前提としており、コード的可読性やメンテナンス性の観点からも it
を使用することが推奨されています。
まとめ
it
とtest
は、Jest において同じ機能を持つキーワードです。- 歴史的に
it
は BDD、test
は TDD と関連していましたが、現在は Jest 内部で置き換えられるため、違いは意識する必要ありません。 - コード的可読性やメンテナンス性の観点から、近年では
it
を使用する方が一般的になっています。
補足
- TypeScript では、
it
とtest
は型エイリアスとして定義されています。
以上が、Jest における it
と test
の違いに関する解説です。
// describe ブロックでテスト対象をグルーピング
describe('足し算のテスト', () => {
// it ブロックで個々のテストケースを定義
it('1 と 2 を足すと 3 になる', () => {
const result = 1 + 2;
expect(result).toBe(3);
});
test('3 と 4 を足すと 7 になる', () => {
const result = 3 + 4;
expect(result).toBe(7);
});
});
解説
describe
ブロックは、テスト対象となる機能やモジュールをグルーピングするために使用されます。it
またはtest
ブロックは、個々のテストケースを定義するために使用されます。expect
関数は、テスト結果の検証に使用されます。 上記例では、toBe
マッチャーを使用して、実際の結果と期待される結果が一致していることを確認しています。
この例のように、it
と test
は同じように使用することができます。 どちらを使用するかは、個人の好みやプロジェクトのスタイルガイドによって決まります。
以下は、上記のコードを実行したときの Jest の出力例です。
PASS ./example.test.js
足し算のテスト
✓ 1 と 2 を足すと 3 になる (1 ms)
✓ 3 と 4 を足すと 7 になる (1 ms)
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 1.302 s, estimated 2 s
このサンプルコードはあくまでも基本的な例です。 Jest には、様々な機能やオプションが用意されていますので、詳しくは公式ドキュメントを参照することをお勧めします。
Jest における it と test 以外の選択肢
fdescribe と fit
fdescribe
とfit
は、フォーカス テストを実行するために使用されます。 フォーカス テストとは、特定のテストケースのみを実行する機能です。- デフォルトでは、Jest はすべてのテストケースを実行します。 しかし、
fdescribe
またはfit
を使用して囲まれたテストケースのみが実行されます。
fdescribe('特定の機能のテスト', () => {
fit('重要なテストケース', () => {
// ...
});
});
xdescribe
とxtest
は、スキップ テストを実行するために使用されます。 スキップ テストとは、実行をスキップするテストケースです。- スキップ テストは、まだ未完成のテストや、一時的に実行を停止したいテストなどに使用されます。
xdescribe('保留中の機能のテスト', () => {
xtest('未実装のテストケース', () => {
// ...
});
});
beforeAll と beforeEach
beforeAll
とbeforeEach
は、テストスイート または テストケース の実行前に実行されるコードを定義するために使用されます。- テストスイートとは、複数のテストケースをまとめたものです。
beforeAll
は、テストスイート全体に対して一度だけ実行されるコードを定義します。 一方、beforeEach
は、個々のテストケースが実行される前に毎回実行されるコードを定義します。
beforeAll(() => {
// テストスイート全体で使用する共通の初期化処理
});
beforeEach(() => {
// 各テストケースが実行される前に実行される初期化処理
});
afterEach と afterAll
afterEach
は、個々のテストケースが実行された後に毎回実行されるコードを定義します。 一方、afterAll
は、テストスイート全体が実行された後に一度だけ実行されるコードを定義します。
afterEach(() => {
// 各テストケースが実行された後に実行されるクリーンアップ処理
});
afterAll(() => {
// テストスイート全体が実行された後に実行されるクリーンアップ処理
});
ネイミングコンベンション
一般的なネイミングコンベンションとしては、以下のものがあります。
- should を使用する: テストケースで期待される動作を記述します。 例:
should return true when the input is valid
- it を使用する: テストケースの目的を簡潔に記述します。 例:
it calculates the sum of two numbers
- should を使用する: テストケースで期待される動作を記述します。 例:
これらの選択肢を組み合わせることで、より柔軟でわかりやすいテストコードを書くことができます。
Jest には、it
と test
以外にも様々な方法でテストケースを定義することができます。 それぞれの方法の特徴を理解し、状況に応じて使い分けることが重要です。
javascript unit-testing jestjs