我有一个user
工厂默认为user_document
FactoryGirl.define do
factory :user do |u|
sequence(:first_name) {|n| "firstname-#{n}" }
after(:create) do |user|
create(:user_document, document_type: :address_proof, user: user)
end
end
end
我想定义一个新的工厂,其关联user_document为null。我该怎么做呢 ?
[UPDATE]
当我这样做时
factory :user_with_no_doc_buyer do
user_document nil
end
我收到错误说:
NoMethodError: undefined method `user_document=' for #<User:0x007f97329c08f8>
当我这样做的时候
user_documents nil
我得到了
NoMethodError: undefined method `each' for nil:NilClass
感谢
答案 0 :(得分:1)
使用traits
FactoryGirl.define do
factory :user do |u|
sequence(:first_name) {|n| "firstname-#{n}" }
trait :with_user_document
after(:create) do |user|
create(:user_document, document_type: :address_proof, user: user)
end
end
end
end
使用文档创建用户
FactoryGirl.create(:user, :with_user_document)
创建具有空文档的用户
FactoryGirl.create(:user)
答案 1 :(得分:1)
我会创造两个特征。
FactoryGirl.define do
factory :user do
sequence(:first_name) {|n| "firstname-#{n}" }
trait :with_document do
after(:create) do |user|
create(:user_document, document_type: :address_proof, user: user)
end
end
trait :without_document do
user_documents []
end
end
end
然后你只需要打电话给你需要的工厂。
例如 FactoryGirl.create(:user, :with_document)
编辑:您已经看到希望with文档成为默认文档。这很容易。您可以使用您拥有的代码,并在没有文档的情况下提出我的建议,您可以在需要时调用该文档。