3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

seed_fu使ってシードデータを作ったのにrspecのテストを回すとシードデータが消えている

Posted at

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]

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?