FactoryGirlを使用したデータの作成
Gemのインストール
Gemfileに以下を追加し、bundle install
を実行する。
RSpecを使用することを前提に書くのでRSpecも一緒にインストールしておく。
group :development, :test do gem 'rspec-rails' gem 'factory_girl_rails' end
bundle install
後にrspecのインストールをする。
rails g rspec:install
ここでうまくいかないときはspringが悪さをしているので、一度停止させておく。
spring stop
インストールが完了したら、再起動させる。
spring binstub
FactoryGirlのインクルード
インクルードしておいたほうが、FactoryGirlのメソッドを使用する際に、
クラス名を省略できる。
#spec/spec_helper.rb RSpec.configure do |config| # FactoryGirlのインクルード config.include FactoryGirl::Syntax::Methods
Factoryファイルの作成と使用
spec/factoriesディレクトリを作成し、対象のモデル名のファイルを作成する。
# productモデルのFactoryファイル(spec/factories/product.rb) FactoryGirl.define do # product レコードの登録用ファクトリー factory :product do # 名前は複数回実行されることを想定してかぶらないように連番設定する sequence(:name) { |n| "MyProduct#{n}" } price 100 category_id 1 end end
作成したFactoryは以下のように使用する。
# 例としてテスト時にFactoryGirlでデータを作成させる。 describe "GET /products.json" do # テスト前にFactoryGirlでテーブルにデータを登録しておく。 # create_listは第2引数の数だけデータを作成する。 # spec_helper.rbにてFactoryGirlをインクルードしているため、create_listだけで使用できる。 before { @products = create_list(:product, 2) } example "一覧情報を取得できること" do # GET /products.json にアクセスする get api_v1_products_path format: :json # ステータスコードの確認 expect(response.status).to eq 200 # JSONの確認 json = JSON.parse(response.body) expect(json.size).to eq @products.count expect(json[0]["id"]).to eq @products[0].id expect(json[1]["id"]).to eq @products[1].id # 詳細の値の確認は省略 end end
その他FactoryGirlの便利な使い方は、以下の記事を参照。