有什么方法可以使用 Factory Bot 从同一资源创建不同的工厂吗?
Is there any way of creating different factories from the same resource with Factory Bot?
我有一个这样的用户工厂:
FactoryBot.define do
factory :user do
email { 'doo@d.com' }
password { 'password' }
password_confirmation { 'password' }
admin { true }
confirmed_at Time.now
end
end
我在我的功能规范中使用的是这样的:
user = create(:user)
但我希望能够为不同的测试用例设置不同的参数。例如,我想要一个 admin { false }
的用户工厂。有什么办法吗?
你试过这样的事情吗?
FactoryBot.define do
factory :user do
email { 'doo@d.com' }
password { 'password' }
password_confirmation { 'password' }
admin { false }
confirmed_at Time.now
factory :admin do
admin { true }
end
end
end
admin = create(:admin)
只需使用特征:
FactoryBot.define do
factory :user do
email { 'doo@d.com' }
password { 'password' }
password_confirmation { 'password' }
admin { false }
confirmed_at { Time.now }
trait :admin do
admin { true }
end
end
end
所以 FactoryBot.create(:user)
是普通用户,FactoryBot.create(:user, :admin)
是管理员
如您在 README 中所见,您可以同时使用不同的特征
我有一个这样的用户工厂:
FactoryBot.define do
factory :user do
email { 'doo@d.com' }
password { 'password' }
password_confirmation { 'password' }
admin { true }
confirmed_at Time.now
end
end
我在我的功能规范中使用的是这样的:
user = create(:user)
但我希望能够为不同的测试用例设置不同的参数。例如,我想要一个 admin { false }
的用户工厂。有什么办法吗?
你试过这样的事情吗?
FactoryBot.define do
factory :user do
email { 'doo@d.com' }
password { 'password' }
password_confirmation { 'password' }
admin { false }
confirmed_at Time.now
factory :admin do
admin { true }
end
end
end
admin = create(:admin)
只需使用特征:
FactoryBot.define do
factory :user do
email { 'doo@d.com' }
password { 'password' }
password_confirmation { 'password' }
admin { false }
confirmed_at { Time.now }
trait :admin do
admin { true }
end
end
end
所以 FactoryBot.create(:user)
是普通用户,FactoryBot.create(:user, :admin)
是管理员
如您在 README 中所见,您可以同时使用不同的特征