Ruby on rails 重写可单元测试的方法

Ruby on rails 重写可单元测试的方法,ruby-on-rails,performance,unit-testing,activerecord,ruby-on-rails-4,Ruby On Rails,Performance,Unit Testing,Activerecord,Ruby On Rails 4,我发现我经常喜欢编写只查询数据库并返回结果的方法。这对于复杂过滤器或查询“链接”非常有用。例如,这里有一个模型Clazz,它代表一个学生的学术班级Clazz有许多注册s。所以我写这个方法是为了保持我的代码干燥,因为我经常使用这个标准 class Clazz def cash_enrollments enrollments.where(payment_type: 'cash') end end 随着我对单元测试的深入,我注意到这种模式是有问题的,因为它与数据库的耦

我发现我经常喜欢编写只查询数据库并返回结果的方法。这对于复杂过滤器或查询“链接”非常有用。例如,这里有一个模型
Clazz
,它代表一个学生的学术班级
Clazz
有许多
注册
s。所以我写这个方法是为了保持我的代码干燥,因为我经常使用这个标准

class Clazz
    def cash_enrollments
        enrollments.where(payment_type: 'cash')
    end
end
随着我对单元测试的深入,我注意到这种模式是有问题的,因为它与数据库的耦合太紧密了。当在数据库事务运行时测试大型数据集时,问题会加剧


有没有一种“单元测试友好”的方法来重写这段代码?还有其他更好的常见模式吗?

您可能可以尝试提取查询对象或服务对象

您可以将其剔除:
clazz.should\u receive(:cash\u registrations)。和\u return([这个预构建的数组])
不完全确定,但一定要签出存储库模式