DatabaseRewinderを追加した
【ごみ収集曜日APIシリーズ】FactoryGirlを追加した - takapi86のブログ
の続きです。
前回は、テストを2回目実行しようとすると、ユニーク制約に引っかかりエラーになってしまう問題が残ってしまいました。
今回はその対応として、DatabaseRewinder
というGemを使い、Rspecのテスト後に、
Createで作成したTestデータをデータベースから削除するようにしていきます。
上記のREADME.mdを参考にし導入しました。
導入
Gemfile
に database_rewinder
を追加して、bundle installします。
テスト環境のみで使用するので、 group
は test
だけでよいでしょう。
group :test do gem 'database_rewinder' end
rails_helper
に以下の記述を追加します。
複数DBを扱うわけではないので、基本的な設定でいきます。
RSpec.configure do |config| config.before(:suite) do DatabaseRewinder.clean_all end config.after(:each) do DatabaseRewinder.clean end end
試してみる
データがない状態で確認をしたいので、 以下のコマンドで、DBをリセットしておきます。
RAILS_ENV=test bundle exec rake db:migrate:reset
実行してみます。
bundle exec rspec spec/requests/towns_spec.rb .. Finished in 2.18 seconds (files took 3.28 seconds to load) 2 examples, 0 failures bundle exec rspec spec/requests/towns_spec.rb .. Finished in 1.43 seconds (files took 3.2 seconds to load) 2 examples, 0 failures
データを見てみます。
[1] pry(main)> Town.all Town Load (3.0ms) SELECT "towns".* FROM "towns" => [] [2] pry(main)>
2回以上実行しても、正常に動作し、テスト後のデータもすべてクリアされていました。
バッと書いてしまいましたが、今回はこんなところで。