我知道播种测试数据库是一种bad idea。 我需要在模型测试中测试Stripe api通信。我知道单元测试中的外部请求也是一个坏主意,但不过。
条带帐户具有静态订阅计划名称。因此,当我测试与Stripe链接的功能时,我需要从我的数据库中获取它们。我使用Factory girl gem作为夹具源,但由于我只需要Stripe计划的特殊名称,所以我将它们硬编码到工厂:
factory :subscription_type do
name "Personal"
frequency "month"
stripe_plan_id "personal"
end
其他使用此工厂的工厂每次都尝试使用相同的字段值创建新对象,并且由于对subscription_type模型的唯一性进行验证,工厂会抛出错误。如果在一个例子中调用它们,它们都会使用相同的记录(如果存在)。
这里的最佳做法是什么,伙计们?
答案 0 :(得分:0)
为什么不使用sequence(:unique_field) {|n| "unique_field #{n}"}
,这会生成带有顺序的变量n
,然后字段将是唯一的。
答案 1 :(得分:0)
如果您只想拥有一个subscription_type对象,请先尝试创建它,然后将其作为其他工厂的参数传递:
@subscription_type = FactoryGirl.create :subscription_type
@other_object = FactoryGirl.create :other_object, subscription_type: @subscription_type
你也可以尝试为你的工厂定义一个智能关系,它会在之前检查是否有订阅类型:
FactoryGirl.define do
factory :user do
subscription_type { SubscriptionType.first.present? ? SubscriptionType.first : FactoryGirl.create(:subscription_type) }
end
end