seed_fu使ってシードデータを作ったのにrspecのテストを回すとシードデータが消えている
rspec使ったテストを書き始めたので,github actionsでのCI環境でもテストを回るようにしたところ...
rspecを実行するとシードデータが消えていることがわかりました.
原因
spec/rails_helper.rb
にある以下の記述が原因みたいです.
これはテストが始まる時にmigrationがちゃんとできてるかどうか確認してデータベースのスキーマをschema.rbに合わせるみたいです. もしmigrationを行う場合,DBを綺麗に消しちゃうみたいで,それによってseed作っても消えちゃってた様です.
begin ActiveRecord::Migration.maintain_test_schema! rescue ActiveRecord::PendingMigrationError => e puts e.to_s.strip exit 1 end
解決策1: seedをrspec実行時に作るようにする
spec/spec_helper.rb
に以下を追記するとよいです.
config.before(:suite)
はrspecを実行する前に1回だけ行う処理をかけるみたいです.
RSpec.configure do |config| ... config.before(:suite) do SeedFu.seed end ... end
解決策2: Seedを作っても消えないようにする
ActiveRecord::Migration.maintain_test_schema!
を無効にします.
config/environment/test.rb
に以下の1行を追加します.
config.active_record.maintain_test_schema = false
この場合,migrationをRAILS_ENV=test
と指定して回す必要もあります.
CIなどの一連の流れはこのような感じに(github actionsなどではもっと楽にenv
を指定するだけでOKです)
RAILS_ENV=test rails db:setup RAILS_ENV=test rails db:seed_fu RAILS_ENV=test bundle exec rspec