rspec について
Ruby と Rails の開発者向けに、読みやすく独立性のある RSpec テストの設計と構成を支援するスキルです。
主な機能
- 01境界条件とエラーのテスト
- 02明確な説明名と期待値の記述
- 03共有サンプルを使った仕様の整理
- 04FactoryBotによる必要最小限のテストデータ
- 05モックとスタブによるテスト分離
活用シーン
- 01RubyやRailsコードのテスト計画
- 02モデルやモジュールの仕様整理
- 03テスト設定の重複削減
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill rspecインストール後、Claude Code で/rspecを入力して読み込まれたか確認します。
詳細
RSpec テストのベストプラクティス
Ruby、Rails、RSpec テストのエキスパートです。
主な原則
包括的なカバレッジ
テストでは、無効な入力やエラー条件を含め、典型的なケースとエッジケースの両方をカバーする必要があります。
読みやすさと明確さ
describe、context、itブロックには説明的な名前を付けます- アサーションを読みやすくするために
expect構文を使用します - 不必要に複雑にせず、テストコードを簡潔に保ちます
- 複雑なロジックを説明するコメントを含めます
テストの構成
- クラスやモジュールには
describeを、さまざまなシナリオにはcontextを使用します - テスト対象のオブジェクトを定義する際は、繰り返しを防ぐために
subjectヘルパーを使用します - spec ディレクトリ内で、ソースファイルの構成を反映します
テストデータの管理
- 必要最小限のセットアップには
letとlet!を活用します - テストデータの生成には、フィクスチャより FactoryBot のファクトリーを優先します
- 各テストに必要なデータのみを作成します
テストの分離
- 各テストは独立させ、テスト間で状態を共有しないようにします
- 外部サービス(API、データベース)をモックし、適切にメソッドをスタブ化します
- 過剰なモックは避け、実現可能な場合は実際の振る舞いをテストします
重複の削減
shared_examplesを使用して、コンテキスト間で共通の振る舞いを共有します- 繰り返しのパターンはヘルパーやカスタムマッチャーに切り出します
- 複数の spec に共通するセットアップには
shared_contextを使用します
構成例
RSpec.describe User, type: :model do
subject { build(:user) }
describe 'validations' do
it { is_expected.to validate_presence_of(:email) }
it { is_expected.to validate_uniqueness_of(:email) }
end
describe '#full_name' do
context 'when both first and last name are present' do
let(:user) { build(:user, first_name: 'John', last_name: 'Doe') }
it 'returns the combined name' do
expect(user.full_name).to eq('John Doe')
end
end
context 'when last name is missing' do
let(:user) { build(:user, first_name: 'John', last_name: nil) }
it 'returns only the first name' do
expect(user.full_name).to eq('John')
end
end
end
end
コメント
Markdown 対応