FactoryGirlをRuby on Railsで使うときの覚書

さっぱりわからんので覚書

Ruby on Rails (3.x)での設置方法

FactoryGirlRailsを導入する。

Gemfileに以下を追記する。

group :development, :test do
      gem "factory_girl_rails"
      gem "database_cleaner"
end

RSpecと一緒に使う場合は rspec-rails も一緒に導入する。

factory_girlのファイルを設置する

モデルに対応するfactory_girlのファイルを設置する

% rails g factory_girl:model モデル名単数 属性名1:型 属性名2:型 ... 属性名n:型

そうするとRSpecを使っている場合は spec/factories/モデル名単数.rb に雛形がつくられている。例えば以下のようになる。

% rails g factory_girl:model user name:text age:integer
      create  spec/factories/users.rb

spec/factories/users.rbは、以下のようになる。

# Read about factories at https://github.com/thoughtbot/factory_girl

FactoryGirl.define do
  factory :user do
    name "MyText"
    age 1
  end
end

FactoryGirlの名前空間

spec/factories/以下に定義されている内容が1つのファイルにまとめあげられているだけのようなので、同じ名前のファクトリは定義できない。Specファイルの方からはどのファイルにファクトリが書かれているのかはきにしなくてよい。

FactoryGirlとActiveRecordの関係性

How factory_girl interacts with ActiveRecordによると以下のように定義されているとき、

FactoryGirl.define do
  sequence(:email) {|n| "person-#{n}@example.com" }

  factory :user do
    email
  end

  factory :post do
    user
    title "Hello"
  end
end

以下のように呼び出すのは、

post = create(:post)

以下の処理をしているのと同じであるということ。

user = User.new
user.email = "person-1@example.com"
user.save!
post = Post.new
post.title = "Hello"
post.user = user
post.save!