Rails
RSpec

RSpecでテストDBに突っ込んだデータを消したい

More than 3 years have passed since last update.

RailsTutorialに従ってRSpecを使って
authenticate(@user.password)
を試そうとしたところ、突っ込んだ前のデータと合わずにテスト失敗。。。

Database Cleanerを使えばいいらしいっす。
(追加するとテストを実行する度にテストデータが消去される。)

下記のように各ファイルを編集。

Gemfile
group :development,:test do
  gem 'database_cleaner'
end
spec/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

これで前のテストでのデータが消去されて、テストが通りました。
めでたしめでたし。

※各テストのbefore(:each)で作成したテストデータは消去されるが、before(:all)で作成したテストデータは消去されないらしい。

参照:http://dev.classmethod.jp/server-side/ruby-on-rails/ruby-on-rails_database-cleaner_data_erase/