【Ruby on Rails】Database Cleanerによるテストデータの消去
はじめに
前回、FactoryGirlによるテストデータの準備という記事を書きました。このFactoryGirlにて作成するテストデータを、テストを実行する度に消去するDatabase Cleanerについて、今回は書いてみたいと思います。
使い方
使い方は非常に簡単で、以下のような流れになります。
- Gemをインストールする
- 消去するタイミング等を定義する
以下、手順です。
1.Gemfile
Gemfileに以下を記述し、bundle installします。test時にしか使わない場合(ほとんどこのケースと思われる)、「group :test」の中に記述したほうがいいと思います。
group :development,:test do gem 'database_cleaner' end
2.spec_helper
spec_helper.rbに以下を記述します。
require 'database_cleaner' RSpec.configure do |config| (中略) config.before(:suite) do DatabaseCleaner.strategy = :truncation end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end end
追加したのは1行目と、6~16行目です。これらを追加することにより、テストを実行する度にテストデータが消去されます。注意点としては、この書き方では各テストのbefore(:each)で作成したテストデータは消去されますが、before(:all)で作成したテストデータは消去されないことです。
まとめ
RSpecでテストデータを扱う際、作成にはFactoryGirl、消去にはDatabase Cleanerと、セットで使うと色々便利かと思います。