rspecで関連するモデルもfactoryで簡単に同時に生成する方法

rspecで関連するモデルを同時に生成する方法があります。

下記のような所有関係を持っていたとします。

class User < ActiveRecord::Base
  has_many :posts
end
class Post < ActiveRecord::Base
  belongs_to :user
end

Factoryの書き方です

FactoryGirl.define do
  factory :user do
    email 'hoge@hoge.com'
    password 'password'
    password_confirmation 'password'
  end
end
FactoryGirl.define do
  factory :comment do
    user  ←ここで関連するfactoryを書いておけば、自動で読み込んでくれる
    body "MyText"
  end
end

表示確認

[2] pry(#<RSpec::ExampleGroups::CommentsController>)> User.all
=> [#<User:0x007f84da107cf8
  id: 1,
  email: "hoge@hoge.com",
  crypted_password: "$2a$10$YMAObLcAlCm3./ZS/g5Dcu5126E2Eq1Z4CGI9zkbVWSHYDrVS7kYS",
  salt: "2WyQbT9XALMEUcgG6158",
  created_at: Wed, 25 May 2016 07:51:01 JST +09:00,
  updated_at: Wed, 25 May 2016 07:51:01 JST +09:00,
  admin: false>]

まとめ

同時に作ることを前提とする場合は、factoryに関連するfactoryも書いておけば、勝手に作ってくれます。