Ruby on rails 删除/模拟持久层?

Ruby on rails 删除/模拟持久层?,ruby-on-rails,Ruby On Rails,在其他语言和技术栈中,我总是被告知在编写单元测试时模拟/存根数据库层和所有外部服务。但是,RoR群组往往不会模拟/存根数据库层,有时甚至会在控制器中进行活动记录调用(.e.#find)(抖动) 一方面,Active Record非常棒,使许多任务变得非常简单。它使得对象图的表示非常简单和漂亮。另一方面,我似乎无法摆脱这样的感觉:在控制器的活动记录上调用#find是一种糟糕的设计。如果我要在我的应用程序和活动记录之间放置一个抽象层,从而只从持久层返回数据传输对象,那么我将不得不编写更多的代码。然而

在其他语言和技术栈中,我总是被告知在编写单元测试时模拟/存根数据库层和所有外部服务。但是,RoR群组往往不会模拟/存根数据库层,有时甚至会在控制器中进行活动记录调用(.e.#find)(抖动)

一方面,Active Record非常棒,使许多任务变得非常简单。它使得对象图的表示非常简单和漂亮。另一方面,我似乎无法摆脱这样的感觉:在控制器的活动记录上调用#find是一种糟糕的设计。如果我要在我的应用程序和活动记录之间放置一个抽象层,从而只从持久层返回数据传输对象,那么我将不得不编写更多的代码。然而,我的测试将是超快速的,应用程序的架构设计将更接近我习惯的设计


大家对此有何看法?

如果您在控制器中的User.find调用遇到严重问题,您可能需要使用其他框架。如果我们接受控制器中的User.find,则是Client.select(:name).distinct.limit(5).offset(30)?如果我们容许这样做,那么是否也可以加入“除非”条款?我正试图找出它的极限在哪里。我什么时候知道控制器中的内容过多?这样做还意味着我将始终在测试中查询数据库。这个数据库搅动量可以吗?