我正在使用Mongoid构建Rails 3.2.11应用程序。我用Cucumber测试并用FactoryGirl创建测试对象。我有嵌入对象。我希望能够将FactoryGirl特性与我的父对象和嵌入对象一起使用,以进行大量排列并保持干燥。
问题:我似乎无法获得应用于嵌入对象的特征。
model.rb (实际上,单独的模型文件)
class User
include Mongoid::Document
#Fields and stuff
embeds_one :car
end
class Car
include Mongoid::Document
#Fields and stuff
embedded_in :user
end
规格/ factories.rb
FactoryGirl.define do
factory :user do
status 'active' # shared attribute
trait :bob do
name 'Bob'
email 'bob@bob.com'
end
trait :carol do
name 'Carol'
email 'carol@carol.com'
end
car { [FactoryGirl.build(:car)] }
end
factory :car do
number_of_tires 4 # shared attribute
trait :red_ford do
make 'Ford'
color 'Red'
end
trait :blue_chevy do
make 'Chevy'
color 'Blue'
end
end
end
features / step_definitions / user_steps.rb (无法正常工作)
Given /^There is a user Bob with a Blue Chevy$/ do
FactoryGirl.create(:user, :bob, :car => [:car => :blue_chevy])
end
如果我不使用嵌入式对象特征,我可以在工厂中创建用户对象。是否有任何方法可以使用所需的特征构建嵌入对象?谢谢!
修复
Thoughtbot http://joshuaclayton.me的Joshua Clayton说:将特征应用于关联没有简写语法; 基本上,你必须做这样的事情:
cars = [FactoryGirl.build(:car, :blue_chevy)]
FactoryGirl.create(:user, :bob, cars: cars)
答案 0 :(得分:2)
因为它是1对1的关系,所以在spec / factories.rb中构建car对象时不需要数组
car { FactoryGirl.build(:car) }
这也适用于黄瓜步骤。另外,据我所知,traits被用作属性,所以你的步骤代码看起来应该是
FactoryGirl.create(:user, :bob, :car, :blue_chevy)