kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

Rspecでseeds.rbをリセット時に読み込む。

プロジェクトにrspecとfactory girlのgemを追加して seeds.rbを読み込んでから、毎回テストを起動したかったのでこのあたりをまとめておく。

環境

rspecとfactory girlの導入

まずは、Gemfileにrspec_railsfactory_girl_railsを追加してbundle installします

# Gemfileにgemを追加
group :development, :test do
  gem 'rspec_rails'
  gem 'factory_girl_rails'
end

group :test do
  gem 'database_clear'
end
bundle install

rspec install

$ rails g rspec:install

環境別のseedを作成する

これはRails.env.hoge?で切り分ければ、seeds.rbにまとめることもできる。

env毎のファイルを作成する。

mkdir db/seeds
touch db/seeds/test.rb
touch db/seeds/development.rb
touch db/seeds/production.rb

db/seeds/test.rbdb/seeds/development.rbに記述を追加

values = { email: 'hoge@example.com'... } # attriubutesを設定する。
Admin.create(values)

seeds.rbに下記のコードを追加。

load(Rails.root.join( 'db', 'seeds', "#{Rails.env.downcase}.rb"))

テスト時にdbをリセットして、seedsを読み込む。

#clean_withの引数に、exceptでクリーンにしないmodel名を記述することもできます。

config.before(:suite) do
  load Rails.root.join('db', 'seeds.rb')
  DatabaseCleaner.clean_with :truncation
  # DatabaseCleaner.clean_with :truncation, { except: %w(categories brands) }
end

参考URL

blog.inouetakuya.info

環境ごとに投入する初期データを変える - Qiita

環境にあわせてrake db:seedを実行する - how to code something