mcpField
V
vitest-testing

vitest-testing

github.com/existential-birdsテスト・品質85467 回インストール12 週間前に更新
リポジトリ

vitest-testing について

アサーション、非同期テスト、モック、ライフサイクルフックを扱う Vitest のテスト実践スキルです。テストスイートの実行と、非同期マッチャーでの `await` 使用を確認する検証基準も示します。

主な機能

  1. 01一般的なアサーションの参照
  2. 02非同期テストの書き方
  3. 03vi によるモック操作の例
  4. 04テストフックとメソッドの一覧
  5. 05テスト検証基準の定義

活用シーン

  1. 01Vitest テストのアサーション作成
  2. 02非同期関数と Promise のテスト
  3. 03テスト変更と非同期マッチャーの確認

インストール

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

$npx skills add https://github.com/existential-birds/beagle --skill vitest-testing

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

CONFIG.md
MOCKING.md
PATTERNS.md
references/
config.md
mocking.md
patterns.md

詳細

Vitest のベストプラクティス

クイックリファレンス

import { describe, it, expect, beforeEach, vi } from 'vitest'

describe('feature name', () => {
  beforeEach(() => {
    vi.clearAllMocks()
  })

  it('should do something specific', () => {
    expect(actual).toBe(expected)
  })

  it.todo('planned test')
  it.skip('temporarily disabled')
  it.only('run only this during dev')
})

よく使うアサーション

// Equality
expect(value).toBe(42)                    // Strict (===)
expect(obj).toEqual({ a: 1 })             // Deep equality
expect(obj).toStrictEqual({ a: 1 })       // Strict deep (checks types)

// Truthiness
expect(value).toBeTruthy()
expect(value).toBeFalsy()
expect(value).toBeNull()
expect(value).toBeUndefined()

// Numbers
expect(0.1 + 0.2).toBeCloseTo(0.3)
expect(value).toBeGreaterThan(5)

// Strings/Arrays
expect(str).toMatch(/pattern/)
expect(str).toContain('substring')
expect(array).toContain(item)
expect(array).toHaveLength(3)

// Objects
expect(obj).toHaveProperty('key')
expect(obj).toHaveProperty('nested.key', 'value')
expect(obj).toMatchObject({ subset: 'of properties' })

// Exceptions
expect(() => fn()).toThrow()
expect(() => fn()).toThrow('error message')
expect(() => fn()).toThrow(/pattern/)

非同期テスト

// Async/await (preferred)
it('fetches data', async () => {
  const data = await fetchData()
  expect(data).toEqual({ id: 1 })
})

// Promise matchers - ALWAYS await these
await expect(fetchData()).resolves.toEqual({ id: 1 })
await expect(fetchData()).rejects.toThrow('Error')

// Wrong - creates false positive
expect(promise).resolves.toBe(value)  // Missing await!

モックのクイックリファレンス

const mockFn = vi.fn()
mockFn.mockReturnValue(42)
mockFn.mockResolvedValue({ data: 'value' })

expect(mockFn).toHaveBeenCalled()
expect(mockFn).toHaveBeenCalledWith('arg1', 'arg2')
expect(mockFn).toHaveBeenCalledTimes(2)

検証ゲート

テストを追加または変更するときは、次の手順を使用します。各手順には明確な合格条件があります。

  1. テストスイートを実行する — パッケージまたはワークスペースのルートから、CI で使われるのと同じコマンドを実行します(package.json のスクリプトを確認してください。多くの場合、vitest run、pnpm test、または npm test です)。**合格条件:**終了コードが 0 で、レポートに失敗したテストが 0 件と表示されること。
  2. 非同期マッチャー — **合格条件:**すべての expect(…).resolves と expect(…).rejects の前に await があること(await expect(...))。非同期テストを参照してください。resolves または rejects が await なしで記述されている行があると、このゲートは不合格になります。

追加ドキュメント

  • モック:モジュールのモック、スパイ、クリーンアップについては、references/mocking.md を参照してください
  • 設定:vitest.config、セットアップファイル、カバレッジについては、references/config.md を参照してください
  • パターン:タイマー、スナップショット、アンチパターンについては、references/patterns.md を参照してください

テストメソッドのクイックリファレンス

メソッド目的
it() / test()テストを定義する
describe()テストをグループ化する
beforeEach() / afterEach()テストごとのフック
beforeAll() / afterAll()スイートごとのフック
.skipテスト/スイートをスキップする
.onlyこれだけを実行する
.todoプレースホルダー
.concurrent並列実行
.each([...])パラメーター化されたテスト

コメント