在工厂中,如何引用正在创建的对象中其他字段的值?
假设我的模型小部件有两个字段,nickname和fullname
在我的工厂中,我想使用Faker在每次创建工厂时创建一个不同的随机昵称。(最后我想我必须使用sequence(:nickname),否则所有工厂的名称都是相同的。)
为了使一些断言更容易测试,我想生成一个基于昵称的全名,类似于fullname = "Full name for #{nickname}"
FactoryGirl.define do
factory :widget do
sequence(:nickname) { |n| Faker::Lorem.words(2).join(' ') }
sequence(:fullname) { |n| "Full name for " + ????? }
end
end不管我放在哪里?这样,我得到的是#<FactoryGirl::Decl...,而不是昵称设置的任何值。
我试过名字,name.to_s,name.value...似乎什么都不起作用。
发布于 2012-10-07 09:35:13
是。这里有一个来自工厂女孩的Getting Started doc的例子
factory :user do
first_name "Joe"
last_name "Blow"
email { "#{first_name}.#{last_name}@example.com".downcase }
end
FactoryGirl.create(:user, last_name: "Doe").email
# => "joe.doe@example.com"此外,我通常在config/application.rb中单独定义我的序列
FactoryGirl.define do
sequence(:random_string) { |s| ('a'..'z').to_a.shuffle[0, 30].join }
end您可能会从这样做中受益。然后你可以做一些类似这样的事情:
FactoryGirl.define do
factory :widget do
nickname generate(:name_faker) # assuming you had defined a :name_faker sequence
fullname generate("Full name for #{nickname}")
end
endhttps://stackoverflow.com/questions/12765252
复制相似问题