Mat*_*iby 9 ruby-on-rails factory-bot
我有这个例子
FactoryGirl.define do
@site = FactoryGirl.create(:my_site)
factory :user do
email { Faker::Internet.email }
first_name { Faker::Name.first_name }
last_name { Faker::Name.last_name }
password { 'TarXlrOPfaokNOzls2U8' }
active_directory { '0' }
companies { [FactoryGirl.create(:company, site: @site)] }
sites { [@site] }
end
end
Run Code Online (Sandbox Code Playgroud)
有没有办法用let或者东西实现这个目的......
FactoryGirl.define do
factory :user do
email { Faker::Internet.email }
first_name { Faker::Name.first_name }
last_name { Faker::Name.last_name }
password { 'TarXlrOPfaokNOzls2U8' }
active_directory { '0' }
companies { [FactoryGirl.create(:company, site: FactoryGirl.create(:my_site))] }
sites { [FactoryGirl.create(:my_site)] }
end
end
Run Code Online (Sandbox Code Playgroud)
这有效,但它创建了两个my_site,这是一个Site对象,但我需要它们是相同的...任何想法如何实现这一点
tok*_*and 18
可能最简单的是使用局部变量:
FactoryGirl.define do
site = FactoryGirl.create(:my_site)
factory :user do
email { Faker::Internet.email }
first_name { Faker::Name.first_name }
last_name { Faker::Name.last_name }
password { 'TarXlrOPfaokNOzls2U8' }
active_directory { '0' }
companies { [FactoryGirl.create(:company, site: site)] }
sites { [site] }
end
end
Run Code Online (Sandbox Code Playgroud)
我终于找到了一个好方法来做到这一点。这个问题很老了,但我想我会发布一个答案,以防其他人遇到这个问题。
您可以使用before(:create)回调(或者before(:build)如果这是您的用例)来设置sites集合,然后将网站集的第一个元素分配给公司集合中新创建的公司。
让读者知道,我正在使用已弃用的新FactoryBot类名FactoryGirl。
FactoryBot.define do
factory :user do
email { Faker::Internet.email }
first_name { Faker::Name.first_name }
last_name { Faker::Name.last_name }
password { 'TarXlrOPfaokNOzls2U8' }
active_directory { '0' }
before(:create) do |user|
user.sites << FactoryBot.create(:my_site)
user.companies << FactoryBot.create(:company, site: user.sites.first)
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4735 次 |
| 最近记录: |