rspec和Factory Girl中的种子记录

时间:2014-09-19 02:24:20

标签: ruby-on-rails ruby rspec factory-bot

我知道播种测试数据库是一种bad idea。 我需要在模型测试中测试Stripe api通信。我知道单元测试中的外部请求也是一个坏主意,但不过。

条带帐户具有静态订阅计划名称。因此,当我测试与Stripe链接的功能时,我需要从我的数据库中获取它们。我使用Factory girl gem作为夹具源,但由于我只需要Stripe计划的特殊名称,所以我将它们硬编码到工厂:

  factory :subscription_type do
    name "Personal"
    frequency "month"
    stripe_plan_id "personal"
  end

其他使用此工厂的工厂每次都尝试使用相同的字段值创建新对象,并且由于对subscription_type模型的唯一性进行验证,工厂会抛出错误。如果在一个例子中调用它们,它们都会使用相同的记录(如果存在)。

这里的最佳做法是什么,伙计们?

2 个答案:

答案 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