-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Labels
enhancementNew feature or requestNew feature or requestrubyPull requests that update Ruby codePull requests that update Ruby code
Description
概要
テストで実際のイベント名(CNDT2020等)を使用している問題を解決し、Factory Patternによるテストデータ生成システムを構築する。
現状の問題
- テストで実イベント名(CNDT2020、CNDO2021等)を使用
- テストの独立性が保たれていない
- データの整合性が不十分
- テストデータの保守が困難
調査結果
以下のファイルで実イベント名の使用を確認:
spec/factories/conferences.rb
spec/requests/exporter_spec.rb
spec/requests/timetable_spec.rb
spec/requests/api/v1/*_spec.rb
- その他多数のspecファイル
改善内容
Phase 1: Factory Pattern基盤構築
- ダミーイベント用のFactoryBot設定
- 共通テストデータジェネレーターの作成
- テスト環境専用の命名規則策定
Phase 2: 既存テストの移行
- Conference factoryの改善
# Before factory :cndt2020, class: Conference do abbr { 'cndt2020' } end # After factory :conference do sequence(:abbr) { |n| "test_event_#{n}" } sequence(:name) { |n| "Test Conference #{n}" } end
- Speaker/Talk factoryの独立化
- Profile factoryの改善
Phase 3: テストケースの書き換え
-
spec/requests/
配下のテスト修正 -
spec/models/
配下のテスト修正 -
spec/controllers/
配下のテスト修正
Phase 4: テストデータ管理の改善
- テスト用seedデータの分離
- 本番データへの依存除去
- テストDBの初期化処理改善
実装例
改善前
let\!(:cndt2020) { create(:cndt2020, :registered) }
let\!(:alice) { create(:alice, :on_cndt2020, conference: cndt2020) }
改善後
let(:conference) { create(:conference, :with_registration_open) }
let(:speaker) { create(:speaker, conference: conference) }
Factory定義例
FactoryBot.define do
factory :conference do
sequence(:name) { |n| "Test Conference #{n}" }
sequence(:abbr) { |n| "test_conf_#{n}" }
conference_status { :registered }
trait :with_registration_open do
attendee_entry { 1 }
speaker_entry { 1 }
end
trait :archived do
conference_status { :archived }
end
end
end
期待効果
- テストの独立性確保
- 実データへの依存除去
- テストの保守性向上
- データ整合性の改善
- 新規テスト作成の効率化
関連作業
- 古いイベントデータクリーンアップ(古いイベントデータのクリーンアップとテスト依存関係の修正 #2566)
- データベースfixture整理
参考
📝 Created by Claude Code
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestrubyPull requests that update Ruby codePull requests that update Ruby code