0Pricing
Frontend Academy · レッスン

Jest のセットアップと基本テスト

Jest をインストールし、describe/it/expect テストを書き、toBe や toEqual などの matcher を使い、開発中は watch モードでテストを実行します。

「Jest のセットアップと基本テスト」はCoddyKit上の無料Frontend Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFrontend Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Frontend Academyコースには全4レッスンが含まれています。

フロントエンドコードをテストする理由

テストは、コードを変更したときにリグレッションを検出します。期待される動作をドキュメント化します。リファクタリングする自信も与えてくれます。テストがなければ、変更によって別の箇所が壊れていないか分からず、毎回の変更が賭けになってしまいます。

Jestのインストール

Vite + Reactプロジェクトでは、Vitest(ViteネイティブでJest互換のテストランナー)を使用します。それ以外の構成では、TypeScript用のbabel-jestまたはts-jestとともにJestをインストールします。

# Vitest (preferred for Vite projects):
npm install -D vitest

# Or Jest with TypeScript:
npm install -D jest @types/jest ts-jest

テストファイルの命名

テストファイルはソースファイルの隣に配置します(Button.test.ts、utils.spec.tsなど)。または、__tests__/フォルダーに配置します。Jestは*.test.*または*.spec.*に一致するファイルを見つけます。

describe、it、expect

describeブロック(テストのグループ)と、it/test関数(個々のテスト)でテストを構成します。expectでアサーションを行います。

import { add, formatCurrency } from './utils';

describe('Math utils', () => {
  it('adds two numbers', () => {
    expect(add(2, 3)).toBe(5);
  });

  it('handles negative numbers', () => {
    expect(add(-1, 1)).toBe(0);
  });
});

describe('Currency formatting', () => {
  it('formats USD', () => {
    expect(formatCurrency(1234.5, 'USD')).toBe('$1,234.50');
  });
});

よく使うMatcher

Jestには多くのMatcherがあります。toBe(厳密な等価性)、toEqual(深い等価性)、toContain、toHaveLength、toBeNull、toBeTruthy、toBeFalsy、toThrow、toBeGreaterThanなどです。

expect([1,2,3]).toHaveLength(3);
expect({ a: 1, b: 2 }).toEqual({ a: 1, b: 2 });
expect('hello world').toContain('world');
expect(() => { throw new Error('boom'); }).toThrow('boom');
expect(null).toBeNull();
expect(true).toBeTruthy();

非同期コードのテスト

テストではPromiseを返すか、async/awaitを使用します。Jestは、テストを完了と判定する前にPromiseが解決するのを待ちます。

it('fetches user data', async () => {
  const user = await fetchUser(1);
  expect(user.name).toBe('Alice');
});

// Or with resolves/rejects matchers:
it('resolves with user', () => {
  return expect(fetchUser(1)).resolves.toMatchObject({ name: 'Alice' });
});

beforeEachとafterEach

テストを分離した状態に保つため、各テストの前後にセットアップとクリーンアップを実行します。

describe('User service', () => {
  beforeEach(() => {
    db.seed();
  });
  afterEach(() => {
    db.clear();
  });
  it('creates a user', async () => {
    const user = await userService.create({ name: 'Alice' });
    expect(user.id).toBeDefined();
  });
});

テストの実行

npm testですべてのテストを実行します。npm test -- --watch(Jest)またはwatchモードのvitestを使うと、ファイルの変更時にテストを再実行します。VitestのUI(vitest --ui)では、ブラウザベースのテストランナーを使用できます。

テストカバレッジ

jest --coverage(またはvitest run --coverage)を実行すると、どの行がテストされているかを示すカバレッジレポートが生成されます。カバレッジ70%以上は、チームでよく設定される目標です。カバレッジが100%でも、バグがないとは限りません。

テストしやすいコードを書く

純粋関数(副作用のない関数)は、そのまま簡単にテストできます。関数は小さく、責務を絞ります。依存関係を直接インポートするのではなく、注入します。そうすると、テストダブルへの置き換えが簡単になります。

テストの分離

各テストは完全に独立している必要があります。互いの副作用に依存するテストは壊れやすくなります。テスト間で可変な状態を共有しないでください。afterEachですべてのモックをリセットします。

クイックチェック

2つのオブジェクトの深い等価性を確認するJestのMatcherはどれですか?

まとめ:Jestの基本

describeでテストをグループ化します。it/testで個々のテストを定義します。expectとMatcherで結果をアサートします。プリミティブにはtoBeを使用します。オブジェクトや配列にはtoEqualを使用します。非同期テストではasync/awaitを使うか、Promiseを返します。beforeEach/afterEachでテストを分離します。カバレッジレポートで、どの行がテストされているかを確認できます。純粋関数は最もテストしやすい関数です。

よくある質問

「Jest のセットアップと基本テスト」レッスンは無料ですか?

はい。「Jest のセットアップと基本テスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Frontend Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Frontend Academyコースには全4レッスンが含まれています。

「Jest のセットアップと基本テスト」で何を学びますか?

Jest をインストールし、describe/it/expect テストを書き、toBe や toEqual などの matcher を使い、開発中は watch モードでテストを実行します。 ブラウザで直接実行するハンズオンコードでFrontend Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Frontend Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのFrontend Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Jest のセットアップと基本テスト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このFrontend Academyレッスンでコードを書いて実行できますか?

はい。すべてのFrontend Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Jest のセットアップと基本テスト
  2. @testing-library/react:render と userEvent
  3. @testing-library/vue:コンポーネントのマウント
  4. モジュールと API 呼び出しのモック
← Frontend Academyに戻る