【Ruby on Rails】Database Cleanerによるテストデータの消去

2014.06.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

前回、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と、セットで使うと色々便利かと思います。