mcpField
V
vitest-skill

vitest-skill

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

vitest-skill について

vitest-skillは、Vitestでテストを書く開発者向けのスキルです。モック、スナップショット、Reactコンポーネント、ソース内テストの例に加え、設定やよく使うコマンドも紹介します。

主な機能

  1. 01Vitest APIを使ったテスト作成
  2. 02viによるモジュールのモック
  3. 03スナップショットとインラインスナップショット
  4. 04Reactコンポーネントのテスト
  5. 05ソース内テストとカバレッジの設定

活用シーン

  1. 01TypeScriptコードのユニットテスト作成
  2. 02テスト内でのデータベース呼び出しのモック
  3. 03Reactコンポーネントとシリアライズ結果の検証
  4. 04ウォッチまたはカバレッジモードでのテスト実行

インストール

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

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

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

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

詳細

Vitest テストスキル

基本パターン

基本的なテスト
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { Calculator } from './calculator';

describe('Calculator', () => {
  let calc: Calculator;
  beforeEach(() => { calc = new Calculator(); });

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

  it('throws on divide by zero', () => {
    expect(() => calc.divide(10, 0)).toThrow();
  });
});
モック(jest ではなく vi を使用)
import { vi } from 'vitest';

// Mock module
vi.mock('./database', () => ({
  getUser: vi.fn().mockResolvedValue({ name: 'Alice' }),
  saveUser: vi.fn().mockResolvedValue(true),
}));

// Mock function
const mockFn = vi.fn();
mockFn.mockReturnValue(42);
mockFn.mockResolvedValue({ data: 'test' });

// Spy
const spy = vi.spyOn(console, 'log').mockImplementation(() => {});
expect(spy).toHaveBeenCalledWith('message');
spy.mockRestore();

// Timers
vi.useFakeTimers();
vi.advanceTimersByTime(1000);
vi.runAllTimers();
vi.useRealTimers();
ソース内テスト
// src/math.ts — tests alongside code!
export function add(a: number, b: number) { return a + b; }
export function multiply(a: number, b: number) { return a * b; }

if (import.meta.vitest) {
  const { it, expect } = import.meta.vitest;
  it('adds', () => { expect(add(2, 3)).toBe(5); });
  it('multiplies', () => { expect(multiply(3, 4)).toBe(12); });
}
スナップショットテスト
it('serializes user', () => {
  expect(serializeUser(user)).toMatchSnapshot();
});

it('inline snapshot', () => {
  expect(serializeUser(user)).toMatchInlineSnapshot(`
    { "name": "Alice", "email": "[email protected]" }
  `);
});
React コンポーネントのテスト
import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import Button from './Button';

describe('Button', () => {
  it('renders with label', () => {
    render(<Button label="Click me" />);
    expect(screen.getByText('Click me')).toBeDefined();
  });
});
アンチパターン
悪い例良い例理由
jest.fn()vi.fn()Vitest では vi を使用します
jest.mock()vi.mock()名前空間が異なります
型安全性がないTypeScript + strictVitest は TypeScript を前提としています

クイックリファレンス

タスクコマンド
1 回だけ実行npx vitest run
ウォッチnpx vitest(デフォルト)
UInpx vitest --ui
カバレッジnpx vitest --coverage
特定のファイルnpx vitest run src/math.test.ts
フィルターnpx vitest run -t "adds"

vitest.config.ts

import { defineConfig } from 'vitest/config';
export default defineConfig({
  test: {
    globals: true,
    environment: 'jsdom',
    coverage: { provider: 'v8', reporter: ['text', 'html'] },
    include: ['src/**/*.{test,spec}.{js,ts,tsx}'],
    includeSource: ['src/**/*.{js,ts}'],
  },
});

詳細なパターン → reference/playbook.md

§セクション内容
1本番環境の設定設定、ワークスペース、セットアップファイル
2モックのパターンvi.mock、スパイ、タイマー、fetch
3React Testing Libraryコンポーネント、フック、プロバイダー
4スナップショットとインラインスナップショットファイル、インライン、シリアライザー
5テーブル駆動テストtest.each、describe.each
6ソース内テストソースと同じ場所に配置するテスト
7API/統合テストfetch を使ったサーバーテスト
8CI/CD 統合GitHub Actions、スクリプト
9デバッグのクイックリファレンスよくある問題 10 件
10ベストプラクティスのチェックリスト13 項目

コメント