我有一个非常大的Rails代码库,我们使用了很多工厂(FactoryGirl)。问题是,工厂女孩的实例创建了一个数据库事务,因此当我们运行整个测试套件时,需要很长时间。但是,如果我们正确使用Rspec模拟,那么测试会快速运行,因为模拟很轻 - 不需要DB事务。
我的问题:你何时模拟角色,实体或对象,何时使用对象的有效实例?如果有人可以提供一个例子,那就太好了。
答案 0 :(得分:3)
我已经学会了在测试中分解何时使用FactoryGirl或活动记录实例。它们应该用在模型测试和控制器测试中。
模型测试 - 必须与数据库集成。如果要创建与用户实例交互的用户测试,则需要用户工厂。但是,如果您与其他模型(非User模型)合作,那么我将为这些协作者创建双精度和存根方法。
使用控制器测试的工厂也可以很慷慨。主要是因为控制器是后端生态系统的外层。要测试它,您需要与许多Rails和模型的一部分集成。我发现在这里使用工厂是可以的。
对于应用程序逻辑 - 服务,域,策略,普通旧ruby对象 - 您应该单独测试每个域。对于被测试的单元或对象,可以随意初始化它,但为其协作者创建双打,模拟和存根。