DatabaseRewinderを追加した

【ごみ収集曜日APIシリーズ】FactoryGirlを追加した - takapi86のブログ

の続きです。 前回は、テストを2回目実行しようとすると、ユニーク制約に引っかかりエラーになってしまう問題が残ってしまいました。 今回はその対応として、DatabaseRewinderというGemを使い、Rspecのテスト後に、 Createで作成したTestデータをデータベースから削除するようにしていきます。

github.com

上記のREADME.mdを参考にし導入しました。

導入

Gemfiledatabase_rewinder を追加して、bundle installします。

テスト環境のみで使用するので、 grouptest だけでよいでしょう。

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回以上実行しても、正常に動作し、テスト後のデータもすべてクリアされていました。

バッと書いてしまいましたが、今回はこんなところで。