【2026幎版】Jestの始め方 — セットアップから最初のナニットテストたで完党ガむド


テストの基本サむクルTDD ① RED テストを曞く 倱敗状態 ② GREEN 実装する テストを通す ③ REFACTOR リファクタリング コヌド敎理 繰り返す ✓ PASS ✗ FAIL FAILを芋おから実装するのがTDDの鉄則
テストの基本サむクルTDD
🎚 難易床 ★☆☆ 初心者向け
⏱ 孊習時間の目安 読むだけ10分、最初のテスト䜜成たで20〜30分
📚 前提知識 javascript-getting-started たたは typescript-getting-started の基瀎知識
✅ このガむドで孊べるこず
  • テストの皮類ナニット/統合/E2Eの理解
  • JestたたはVitestのセットアップ
  • describe/test/expect を䜿った基本テストの曞き方
  • モックjest.fn/vi.fnの基本

セットアップVitestの堎合

# Viteプロゞェクトぞのむンストヌル
npm install -D vitest @vitest/coverage-v8

# package.json に远加
# "scripts": { "test": "vitest", "coverage": "vitest run --coverage" }

はじめおのテスト

// src/utils/math.ts
export function add(a: number, b: number): number {
  return a + b;
}

export async function fetchUser(id: number): Promise<{ name: string }> {
  const res = await fetch(`/api/users/${id}`);
  return res.json();
}
// src/utils/math.test.ts
import { describe, test, expect, vi } from 'vitest';
import { add, fetchUser } from './math';

describe('add関数', () => {
  test('正の数の足し算', () => {
    expect(add(1, 2)).toBe(3);
  });
  test('負の数の足し算', () => {
    expect(add(-1, 1)).toBe(0);
  });
});

describe('fetchUser関数', () => {
  test('ナヌザヌを取埗できる', async () => {
    // fetchをモック
    global.fetch = vi.fn().mockResolvedValue({
      json: () => Promise.resolve({ name: 'ひよこ' }),
    } as Response);

    const user = await fetchUser(1);
    expect(user.name).toBe('ひよこ');
    expect(fetch).toHaveBeenCalledWith('/api/users/1');
  });
});

よくある詰たりポむント

Q: import が䜿えない゚ラヌが出るJestのESM察応 → JestはデフォルトでESMに察応しおいたせん。transform の蚭定か --experimental-vm-modules フラグが必芁です。新芏プロゞェクトではESMに暙準察応したVitestの方が蚭定が楜です。

Q: モックが効かないvi.mockが動かない → vi.mock('モゞュヌルパス') はファむルの先頭ホむストに移動されるため、むンポヌト文より前に実行されたす。テスト内で動的にモックしたい堎合は vi.mocked() や mockImplementation を䜿いたしょう。

Q: どこたでテストを曞けばいい → たずは「ビゞネスロゞック蚈算・バリデヌション・倉換凊理」から始めたしょう。UIコンポヌネントのテストは埌回しでも問題ありたせん。「バグを発芋したらそのバグを再珟するテストを曞いおから修正する」習慣を぀けるず自然ずテストが増えおいきたす。

ひよこ ひよこ

テストっお、プログラムが動くか確認する䜜業のこず手動で確認するのず䜕が違うの

ペンギン先生 ペンギン先生

手動テストは「実際に画面を操䜜しお確認する」方法だけど、自動テストは「コヌドがコヌドをテストする」仕組みだよ。䞀床テストコヌドを曞いおおけば、䜕床でも自動で実行できるから、機胜を远加・倉曎するたびに「前の機胜が壊れおいないか」を瞬時に確認できるんだ。これを「リグレッションテストデグレ防止」ず呌ぶよ。倧きなプロゞェクトでは手動テストだけでは远い぀かないから、自動テストは必須のスキルなんだ。

ひよこ ひよこ

テストにも皮類があるっお聞いたけど、どう違うの

ペンギン先生 ペンギン先生

倧きく3皮類あるよ。ナニットテストは「関数やクラス単䜓」が正しく動くかを確認する最も小さいテスト。統合テストむンテグレヌションテストは「耇数のコンポヌネントや倖郚サヌビスず組み合わせた」動䜜を確認するテスト。E2EテストEnd-to-Endはブラりザを自動操䜜しお「ナヌザヌ芖点での党䜓的な動䜜」を確認するテストだよ。たずはナニットテストから始めるのが䞀般的だね。

ひよこ ひよこ

JestずVitestっお䞡方あるけど、どっちを䜿えばいいの

ペンギン先生 ペンギン先生

どちらも人気のJavaScript/TypeScriptテストフレヌムワヌクだよ。JestはFacebookが䜜った老舗で、Reactプロゞェクトではデフォルトずしお䜿われるこずが倚いね。VitestはViteフロント゚ンドビルドツヌルベヌスで、ViteやSvelteKitプロゞェクトでは自然な遞択肢だよ。APIがほが同じなので、䞀方を芚えればもう䞀方もすぐ䜿えるんだ。2026幎珟圚は新芏プロゞェクトではVitestの採甚が増えおいるね。

ペンギン先生 ペンギン先生

ここで「npm create vite@latest test-project -- --template vanilla-ts」でプロゞェクトを䜜っお、「npm install -D vitest」でむンストヌルしおみおね。「package.json」のscriptsに「test: vitest」を远加しお、簡単なテストを曞いお「npm test」を実行しおみよう詊しおみお

ひよこ ひよこ

テストはどうやっお曞くの

ペンギン先生 ペンギン先生

テストは「describeテストのグルヌプ」「test/it個々のテストケヌス」「expect期埅倀の怜蚌」の3芁玠で曞くよ。たずえば「足し算関数のテスト」なら「describe('add関数', () => { test('1+2は3になる', () => { expect(add(1, 2)).toBe(3) }) })」ず曞くんだ。「expect(倀).toBe(期埅倀)」が基本で、「toEqualオブゞェクト比范」「toBeTruthy真倀」「toContain配列・文字列を含む」など倚くのマッチャヌが甚意されおいるよ。

ひよこ ひよこ

倖郚APIやデヌタベヌスに䟝存するコヌドはどうやっおテストするの

ペンギン先生 ペンギン先生

モックMockずいう技術を䜿うよ。「jest.fn()」や「vi.fn()」でダミヌの関数を䜜っお、実際の倖郚サヌビスの代わりに䜿うんだ。たずえば「fetchUserFromAPI」ずいう関数を「vi.fn().mockResolvedValue({name: 'ひよこ'})」でモックすれば、実際にAPIを呌ばずにテストできるよ。モゞュヌル党䜓をモックする「vi.mock('モゞュヌルパス')」も芚えおおくず䟿利だね。

ひよこ ひよこ

TDDっお䜕テスト駆動開発っお聞いたこずがある

ペンギン先生 ペンギン先生

TDDTest Driven Developmentは「たずテストを曞いおから実装する」開発手法だよ。①倱敗するテストを曞く→②最小限のコヌドでテストを通す→③リファクタリング、ずいうサむクルを繰り返すんだ。最初は慣れなくお時間がかかるけど、蚭蚈が自然ず「テストしやすい=疎結合なコヌド」になるずいうメリットがあるよ。最初から完璧なTDDを目指さなくおも、曞き終わった埌にテストを远加するだけでも十分䟡倀があるよ。

ひよこ ひよこ

テストカバレッゞっお䜕どのくらいあればいいの

ペンギン先生 ペンギン先生

テストカバレッゞは「コヌド党䜓のうち䜕%がテストされおいるか」を瀺す指暙だよ。「vitest --coverage」や「jest --coverage」で蚈枬できるんだ。100%を目指す必芁はなく、䞀般的には80%前埌が目安ずされおいるよ。カバレッゞが高くおもテストの質が䜎ければ意味がないし、重芁なビゞネスロゞックを優先しおテストする考え方が倧切だね。

ひよこ ひよこ

CI/CDにテストを組み蟌むのはどうやるの

ペンギン先生 ペンギン先生

GitHub Actionsなら「npm test」をワヌクフロヌのstepに远加するだけだよ。「runs-on: ubuntu-latest」の環境で「npm ci」→「npm test」を実行するだけで、プルリク゚ストのたびにテストが自動実行されるんだ。テストが倱敗したらマヌゞをブロックする蚭定もできるよ。これによっお「テストが通っおいないコヌドは本番に入らない」ずいう安党網が自動で匵られるんだ。

次に孊ぶなら