このプロジェクトはVitestを使用してテストを行っています。
# 全テストを実行
pnpm test:run
# ウォッチモードでテストを実行(開発時に便利)
pnpm test
# UIモードでテストを実行
pnpm test:ui
# カバレッジレポートを生成
pnpm test:coverage基本的なコンポーネントの機能をテストします:
- レンダリング: コンポーネントが正しくレンダリングされるか
- Props: 各プロパティが正しく動作するか
- イベント:
ready,update,change,destroyなどのイベントが正しく発火するか - V-Model: 双方向バインディングが正しく動作するか
- スロット: スロットコンテンツが正しく表示されるか
- 公開メソッド:
getRange(),setCursor()などのメソッドが正しく動作するか
サーバーサイドレンダリング環境での動作をテストします:
- サーバーサイドレンダリング: SSR環境でエラーなくレンダリングされるか
- 安全なメソッド呼び出し:
viewが未初期化でもメソッドがエラーを投げないか - クライアントサイドハイドレーション: ブラウザでの初期化が正しく行われるか
- グレースフルデグラデーション: 機能が段階的に提供されるか
- メモリリーク防止: コンポーネントが正しくクリーンアップされるか
新しい機能を追加する場合は、対応するテストも追加してください:
import { describe, it, expect } from 'vitest';
import { mount } from '@vue/test-utils';
import CodeMirror from '@/components/CodeMirror';
describe('New Feature', () => {
it('should work correctly', async () => {
const wrapper = mount(CodeMirror, {
props: {
modelValue: 'test',
// 新機能のprops
},
});
// テストロジック
expect(wrapper.exists()).toBe(true);
});
});- テストランナー: Vitest
- DOM環境: happy-dom(軽量で高速)
- Vueテストユーティリティ: @vue/test-utils
- アサーション: Vitest標準のexpect API
カバレッジレポートは以下を除外しています:
node_modules/src-docs/(ドキュメントサイト)dist/(ビルド出力)**/*.d.ts(型定義ファイル)**/*.config.*(設定ファイル)src/Meta.ts(自動生成ファイル)src/helpers/h-demi.ts(Vue 2/3互換レイヤー)
各テストは他のテストに依存しないようにしてください。
beforeEach(() => {
// 各テストの前にクリーンアップ
document.body.innerHTML = '';
});コンポーネントのライフサイクルを待つためにnextTick()を使用してください。
await nextTick();
await nextTick(); // onMountedを待つテスト後はコンポーネントをアンマウントしてください。
wrapper.unmount();テストは何をテストしているかが明確になるようにしてください。
// 良い例
expect(wrapper.props('readonly')).toBe(true);
// 避けるべき例
expect(wrapper.props('readonly')).toBeTruthy();長時間かかるテストにはタイムアウトを設定できます:
it('long running test', { timeout: 10000 }, async () => {
// テストコード
});attachToオプションを使用してDOMに直接マウントしてください:
const wrapper = mount(CodeMirror, {
props: { modelValue: 'test' },
attachTo: document.body,
});
// 忘れずにクリーンアップ
wrapper.unmount();テスト後に適切にクリーンアップされているか確認してください:
afterEach(() => {
// 必要に応じてグローバルな状態をリセット
});GitHub ActionsなどのCI環境でテストを実行する場合は、pnpm test:runを使用してください。これはウォッチモードなしで一度だけテストを実行します。
- name: Run tests
run: pnpm test:run