场景是用户创建的嵌套表单,其中:
所以我的工厂是以这种方式配置的,但当我运行测试时,带给我这个结果:
Failure/Error: user_attributes[:user_attributes][:profile_attributes] = Factory.attributes_for :profile
NoMethodError:
undefined method `[]=' for nil:NilClass
工厂
Factory.define :user do |f|
f.after_build do |user|
f.email 'exemple@exemple.com'
f.password 'password'
f.password_confirmation 'password'
user.profile ||= Factory.build(:profile, :user => user)
end
end
Factory.define :profile do |f|
f.after_build do |profile|
profile.user ||= Factory.build(:user, :profile => profile)
f.nome 'alguem'
f.sobrenome 'alguem'
f.endereco 'rua x'
f.numero '95'
f.genero 'm'
f.complemento 'casa'
f.bairro 'bairro x'
f.cidade 'cidade x'
f.estado 'estado x'
f.cep '232323'
end
end
Users_spec
describe "CreateUsers" do
before :each do
user_attributes = Factory.attributes_for :user
user_attributes[:user_attributes][:profile_attributes] = Factory.attributes_for :profile
@user = User.new(user_attributes)
end
答案 0 :(得分:1)
假设您在创建用户时尝试自动创建配置文件,请尝试使用新的FactoryGirl语法以这种方式构建它:
工厂档案:
FactoryGirl.define do
factory :user do
email 'exemple@exemple.com'
password 'password'
password_confirmation 'password'
after_build do |profile|
user.profile << FactoryGirl.build(:profile, :user => user)
end
end
factory :profile do
nome 'alguem'
sobrenome 'alguem'
endereco 'rua x'
numero '95'
genero 'm'
complemento 'casa'
bairro 'bairro x'
cidade 'cidade x'
estado 'estado x'
cep '232323'
user
end
end
请注意,在配置文件工厂中添加user
并在配置文件记录中定义关联。如果您的用户工厂被称为:user
,则不必传递任何参数。
然后您应该可以致电
@user = FactoryGirl.build(:user)
它将构建用户和个人资料。您可以致电@user.profile
。
如果您致电@user = FactoryGirl.create(:user)
,则会同时创建用户和个人资料,并将user_id
插入个人资料记录。