Help us understand the problem. What is going on with this article?

database_cleaner transactionの設定

More than 5 years have passed since last update.

database_cleanerの設定(transactionが使える場合)

背景

database_cleanerでテスト前後のDBの消去をしています。
database_cleanerには消去の方法として以下の2つがあります
- truncation
- transaction

transactionはtruncationに比べ、DBに制約はあるものの、
truncateするのではなくtransactionをrollbackするだけなので早いです。
詳しくは公式のページを見てください。
https://github.com/bmabey/database_cleaner

自分の対象とするシステムはmysqlを使っているので、
transactionが使えました。

実際の設定方法

Guard+spork+rspecでまわしている場合、
Spork.preforkの中に以下のように追記すればOK

最初に一度truncationで消したあと、
各テストケースごとにtransactionで消しています。
最初にtruncationするとき、マスタ系などいちいち消さないテーブルは
:exceptで指定するとそれ以外のテーブルを消してくれます。

spec_helper.rb
Spork.prefork do
  ...
  RSpec.configure do |config|
   ....
    # for database_cleaner
    config.before(:suite) do
      DatabaseCleaner.clean_with(:truncation,{:except => %w{except1 except2}})
      DatabaseCleaner.strategy = :transaction
    end

    config.before(:each) do
      DatabaseCleaner.start
    end

    config.after(:each) do
      DatabaseCleaner.clean
    end
  end
end

効果

transactionにすると、手元の環境では以下のように大きな差がでました。
- truncationの場合: 9m 17s
- transactionの場合: 28s
transactionが使える場合はtransactionを使ったほうがいいかと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away