読者です 読者をやめる 読者になる 読者になる

FactoryGirlでActiveRecord以外のデータをつくる

ruby

例えばHashie::Mashを返したい場合はこんな感じ。

FactoryGirl.define do
  factory :post, class: Hashie::Mash do
    title "foo"
    body "bar"
  end
end

FactoryGirl.build(:post).class #=> Hashie::Mash
FactoryGirl.build(:post) #=> {"title"=>"foo", "body"=>"bar"}
FactoryGirl.build(:post, title: "baz").title #=> "baz"

ちなみにbuildじゃなくてcreateするとsave!が呼ばれるんだけどHashie::Mash#xxx!xxxフィールドが作られるという挙動なのでcreateでも動くけど無駄にsaveフィールドが作られる。

FactoryGirl.create(:post) #=> {"title"=>"foo", "body"=>"bar", "save" => {}}