Rspec導入時のDatabaseCleanerの設定

こんにちは!kossyです!




さて、今回はRailsのテスティングフレームワークとして有名なRspecを使うときに、
一緒に用いられることの多いDatabaseCleanerの導入手順について、
ブログに残してみたいと思います。





環境
Rails 5.1.6
Ruby 2.5.1
MacOS Mojave





Rspecの導入

まずはRspecの導入です。
Rspecを導入したいアプリケーションのgemfileに以下を追記します。

gemfile

group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'capybara', '~> 2.13'
  gem 'selenium-webdriver'
# ここから追記
  gem 'rspec-rails'
  gem 'factory_bot_rails'
  gem 'database_cleaner'
  gem 'faker'
# ここまで追記
end

アプリ名 $ bundle install

rspec-railsとdatabase_cleaner以外は追記しなくても構いません。



bundle install後、以下のコマンドをターミナルで実行します。

アプリ名 $ rails g rspec:install

=> create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

これで最低限の準備はOKです。




DatabaseCleanerの導入

DatabaseCleanerは、その名の通り、DBを綺麗にしてくれるgemです。
検証用に追加したデータを残しておくと、テストを走らせたときに差分が発生し、
正しくテストができない場合もありますので、テストを走らせた後にDBを綺麗にする必要があるわけです。


以下、導入手順です。

spec/rails_helper.rb
省略

RSpec.configure do |config|
  省略

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
  end

  config.around(:each) do |example|
    DatabaseCleaner.cleaning do
      example.run
    end
  end

end

config.beforeの行でテストを開始する際の処理を記述しています。

config.aroundの行でサンプルの実行前後の処理を記述しています。



参考にさせていただいた記事DatabaseCleanerの実装と使い所 - Qiita
【Ruby on Rails】Database Cleanerによるテストデータの消去 | DevelopersIO