我在我的 Rails 4 站点中有几个模型,我正在对它们进行单元测试。A可以通过模型Clazz
有很多Student
s 。Enrollment
为了正确进行单元测试Clazz
,我需要创建数千种不同类型和数量的班级、招生和学生排列。在这方面使用.yml
会非常麻烦,所以我认为我需要创建一个工厂辅助方法。我知道有些人在为测试创建新逻辑时会哭泣,但我看不到解决方法。
在我的工厂方法中,我使用.new
(ie Clazz.new()
) 创建了对象,因为我打算每个模型仅用于一个测试。但是,由于模型是使用 创建的.new
,因此模型中ActiveRelation
的代码无法正常工作。例如
class Clazz
def cash_enrollments
enrollments.where(payment_type: 'cash')
end
end
此cash_enrollments
方法在我的测试中返回零记录,因为我的对象不在数据库中。
我应该如何处理这些测试?
如果我使用.create
,那么我应该在完成后删除该测试中使用的所有模型,以便将数据集保持在已知状态,对吗?这似乎很乏味且容易出错。
如果我不使用.create
,那么如何构建这些对象,这样我就不需要通过添加一堆.to_a
肯定会导致性能下降的调用来重写我的模型代码?