mcpField
J
jest-skill

jest-skill

github.com/lambdatestテスト・品質384283 回インストール2 週間前に更新
リポジトリ

jest-skill について

jest-skillは、JestでJavaScriptテストを作成・実行するためのスキルです。基本パターンやReactコンポーネントのテストを扱い、応用手法をまとめたプレイブックも案内します。

主な機能

  1. 01マッチャーとモックのパターン
  2. 02非同期テストの例
  3. 03Testing LibraryによるReactコンポーネントのテスト
  4. 04スナップショットテストとJestコマンド
  5. 05reference/playbook.mdの応用パターン

活用シーン

  1. 01マッチャーで値やオブジェクトの結果を検証
  2. 02テスト内で関数やモジュールをモック
  3. 03非同期コードやReactコンポーネントをテスト
  4. 04ウォッチモードでの実行やカバレッジ収集

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/lambdatest/agent-skills --skill jest-skill

インストール後、Claude Code で/jest-skillを入力して読み込まれたか確認します。

同梱ファイルreference/advanced-patterns.mdreference/playbook.md

詳細

Jest テストスキル

基本パターン

基本的なテスト
describe('Calculator', () => {
  let calc;
  beforeEach(() => { calc = new Calculator(); });

  test('adds two numbers', () => {
    expect(calc.add(2, 3)).toBe(5);
  });

  test('throws on division by zero', () => {
    expect(() => calc.divide(10, 0)).toThrow('Division by zero');
  });
});
マッチャー
expect(value).toBe(exact);                 // === strict
expect(value).toEqual(object);             // deep equality
expect(value).toBeTruthy();
expect(value).toBeNull();
expect(value).toBeGreaterThan(3);
expect(value).toBeCloseTo(0.3, 5);
expect(str).toMatch(/regex/);
expect(arr).toContain(item);
expect(arr).toHaveLength(3);
expect(obj).toHaveProperty('name');
expect(obj).toMatchObject({ name: 'Alice' });
expect(() => fn()).toThrow(CustomError);
モック
// Mock function
const mockFn = jest.fn();
mockFn.mockReturnValue(42);
mockFn.mockResolvedValue({ data: 'test' });
expect(mockFn).toHaveBeenCalledWith('arg1');
expect(mockFn).toHaveBeenCalledTimes(1);

// Mock module
jest.mock('./database');
const db = require('./database');
db.getUser.mockResolvedValue({ name: 'Alice' });

// Mock with implementation
jest.mock('./api', () => ({
  fetchUsers: jest.fn().mockResolvedValue([{ name: 'Alice' }]),
}));

// Spy
const spy = jest.spyOn(console, 'log').mockImplementation();
expect(spy).toHaveBeenCalledWith('expected');
spy.mockRestore();

// Fake timers
jest.useFakeTimers();
jest.advanceTimersByTime(1000);
jest.useRealTimers();
非同期テスト
test('fetches users', async () => {
  const users = await fetchUsers();
  expect(users).toHaveLength(3);
});

test('resolves with data', () => {
  return expect(fetchData()).resolves.toEqual({ data: 'value' });
});

test('rejects with error', () => {
  return expect(fetchBadData()).rejects.toThrow('not found');
});
React コンポーネントのテスト(Testing Library)
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import '@testing-library/jest-dom';
import LoginForm from './LoginForm';

test('submits login form', async () => {
  const onSubmit = jest.fn();
  render(<LoginForm onSubmit={onSubmit} />);

  fireEvent.change(screen.getByLabelText('Email'), {
    target: { value: '[email protected]' },
  });
  fireEvent.change(screen.getByLabelText('Password'), {
    target: { value: 'password123' },
  });
  fireEvent.click(screen.getByRole('button', { name: /login/i }));

  await waitFor(() => {
    expect(onSubmit).toHaveBeenCalledWith({
      email: '[email protected]', password: 'password123',
    });
  });
});
スナップショットテスト
test('renders correctly', () => {
  const tree = renderer.create(<Button label="Click" />).toJSON();
  expect(tree).toMatchSnapshot();
});
// Update: jest --updateSnapshot
アンチパターン
悪い例良い例理由
expect(x === y).toBe(true)expect(x).toBe(y)エラーメッセージがより適切です
非同期処理で await を使わない常に await を使う失敗が握りつぶされます
すべてをスナップショットにするUI はスナップショットで、ロジックはアサーションで検証するスナップショット疲れを招きます

クイックリファレンス

タスクコマンド
すべて実行npx jest
ウォッチnpx jest --watch
カバレッジnpx jest --coverage
スナップショットを更新npx jest --updateSnapshot
ファイルを実行npx jest tests/calc.test.js
単一のテストtest.only('name', () => {})

詳細なパターン

本番環境向けのパターンについては、reference/playbook.md を参照してください。

セクション内容
§1 本番環境の設定Node と React の設定、パスエイリアス、カバレッジのしきい値
§2 モックの詳細モジュール/部分/手動モック、スパイ、タイマー、環境変数
§3 非同期パターンPromise、拒否、イベントエミッター、ストリーム
§4 test.eachテーブル駆動テストのための配列、タグ付きテンプレート、describe.each
§5 カスタムマッチャーtoBeWithinRange、toBeValidEmail、TypeScript の宣言
§6 React Testing LibraryuserEvent、フック、コンテキストプロバイダー
§7 スナップショットテストコンポーネント、インライン、プロパティマッチャー
§8 API サービスのテストaxios のモック、CRUD パターン、エラー処理
§9 グローバルセットアップ複数プロジェクトの設定、DB のセットアップ/ティアダウン
§10 CI/CDカバレッジゲートを備えた GitHub Actions
§11 デバッグ表よくある10個の問題と解決策
§12 ベストプラクティス本番環境向けチェックリスト15項目

コメント