こんにちは!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