さっぱりわからんので覚書
Ruby on Rails (3.x)での設置方法
FactoryGirlRailsを導入する。
Gemfileに以下を追記する。
group :development, :test do gem "factory_girl_rails" gem "database_cleaner" end
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!