jpw*_*ynn 13 ruby-on-rails factory-bot
在工厂中,如何引用正在创建的对象中的其他字段之一的值?
假设我的模型Widget有两个字段,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
Run Code Online (Sandbox Code Playgroud)
无论我把它放在哪里??? 去吧,我得到的#<FactoryGirl::Decl...
不是昵称所设置的.
我尝试过name,name.to_s,name.value ......似乎没什么用.
Jas*_*ett 17
是.以下是Factory Girl的入门文档示例:
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"
Run Code Online (Sandbox Code Playgroud)
另外,我通常分别定义我的序列config/application.rb
:
FactoryGirl.define do
sequence(:random_string) { |s| ('a'..'z').to_a.shuffle[0, 30].join }
end
Run Code Online (Sandbox Code Playgroud)
你也可以从中做同样的事情.然后你可以做类似的事情:
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
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4863 次 |
最近记录: |