我在 RSPEC 中使用过很多次工厂女孩,但这个月我的任务是在我们的测试套件中实现 Cucumber 故事。我想我可能有一个我不太确定的问题。
我们的“主要”帐户模型称为“公司”。用户、员工等等等等都属于这个。一些直接通过 f/k 其他通过委托。我们使用 factory-girl 的旧方式设置了许多使用 Factory girl 构建的模型的实例变量。
即在“spec_helper.rb”中
@grade_system = FactoryGirl.create(:grade_system)
@asset_size = FactoryGirl.create(:asset_size)
@asset_size.grades.create!(FactoryGirl.attributes_for(:grade))
@company = FactoryGirl.create(:company, :asset_size => @asset_size, :grade_system => @grade_system)
这是相当愚蠢的国际海事组织。
尝试使用“已定义属性:关联”的正确关联修复工厂时,我不断收到错误消息。我猜是因为使用属于员工的工厂创建的用户都使用具有关联的工厂构建:公司,导致冲突。但这不是唯一的例子。我想我的问题是,这种情况的最佳做法是什么。我觉得如果我可以剔除一家公司并将其分配给所有需要它的工厂,这可能会起作用,或者将所有适当的关联塞入公司工厂,但无法使用 FactoryGirl 建立用户.build(:用户)。.... 或者我只是错过了关联如何运作的要点?
FactoryGirl.define do
factory :company do
sequence(:name) { |n| "Company#{n}" }
sequence(:subdomain) { |n| "subdomain#{n}" }
first_time_setup false
non_exempt_multiplier 1.2
exempt_multiplier 1.2
executive_multiplier 1.2
primary_contact_first_name 'Jarrett'
primary_contact_last_name 'Green'
primary_contact_email 'tes@test.com'
primary_contact_phone '(555) 555-5555'
hours_considered_part_time 30
hours_considered_full_time 40
association :industry
association :grade_system
association :asset_size
end
end
######################################
FactoryGirl.define do
require 'faker'
factory :employee do
association :company
association :position
association :branch
first_name Faker::Name.first_name
last_name 'Smith'
pay_basis 'salary'
current_salary 10000.00
date_in_position (Date.today)
sequence(:internal_id) { |n| n }
user
end
end
############################################################
FactoryGirl.define do
factory :user do
association :company
sequence(:login) {|l| "user#{l}@test.com"}
sequence(:first_name) {|fn| "UserFirstName#{fn}"}
sequence(:last_name) {|ln| "UserLastName#{ln}"}
password 'thisisthepassword'
password_confirmation 'thisisthepassword'
end
end