はじめに
Railsにはfactory_botという便利なgemがあり、そのgemについてまとめました。
factory_botというgemを一言で言うとRspecで用いるテストデータの作成を楽にしてくれるgemです。
Rspecを入れていない方は下記の記事を参考にして入れると良いと思います。
@Mosacさんの記事
RSpecをRailsにインストールする
factory_botを使用する場合は下記のような形でGemfileに記述します。
gem "factory_bot_rails"
使用方法
導入方法
spec/配下にsupportフォルダを作成し、support配下にfactory_bot.rbを作成し、以下を記述する。
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
end
spec/rails_helper.rbにコメントアウトしてある下記のコメントアウトを外し、
support配下のファイルを読み込むように設定する。
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
テストデータの作成方法
spec/factories/配下にテストしたい該当モデルのファイルを作成する。
Userモデルならusers.rbという形でファイルを作成する。
カラムに仮の値を定義して作成する。
FactoryBot.define do
factory :user do
name { "hoge" }
email { "foo@bar.com" }
end
end
上記の場合、userとしてnameがhoge,emailがfoo@bar.comのデータが仮作成される。
モデル名以外の名前をつける場合は下記のように記述する。
FactoryBot.define do
factory :adminuser, class: User do
name { "hoge" }
email { "foo@bar.com" }
end
end
Rspecでのテストデータ使用方法
定義の仕方は下記の通り。
RSpec.describe User, type: :model do
let(:user){ FactoryBot.create(:user) } #通常の書き方 DB登録される
let(:user){ create :user} #省略記法
let(:user){ FactoryBot.build (:user)} #通常の書き方 DB登録されない
let(:user){ build :user} #省略記法
let(:user){ build :user, name: "hogehoge"} #上書きすることも可能
end
上記のようにデータを定義することによって、モデルやコントローラー上で
仮のデータを使ったテストをすることが可能になる。