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
参考
[http://katsuyukikun.hatenablog.com/entry/2018/07/24/224251:embed:cite]
[https://qiita.com/syunk38/items/e6cc1282c5479555f748#suite:embed:cite]