データベースにクエリを実行して結果を返すだけのメソッドを書くのが好きなことがよくあります。これは、複雑なフィルターやクエリの「連鎖」で非常に役立ちます。たとえば、Clazz
学生のアカデミック クラスを表すモデルを次に示します。Clazz
多くEnrollment
の s があります。この基準を頻繁に使用したため、コードを DRY に保つためにこのメソッドを作成しました。
class Clazz
def cash_enrollments
enrollments.where(payment_type: 'cash')
end
end
単体テストに取り掛かるにつれて、このパターンはデータベースとの結合が強すぎるために問題があることに気付きました。データベース トランザクションの実行中に大規模なデータセットをテストすると、問題が悪化します。
このコードを書き換える「単体テストに適した」方法はありますか? より良い別の一般的なパターンはありますか?