Ruby on rails 方法应该去哪里(模型?,其他地方)
在我的一个模型中,我有一个方法,它返回数据,这些数据将被输入到图表中Ruby on rails 方法应该去哪里(模型?,其他地方),ruby-on-rails,oop,rspec,Ruby On Rails,Oop,Rspec,在我的一个模型中,我有一个方法,它返回数据,这些数据将被输入到图表中 class MyModel < ActiveRecord::Base def ownership_data format_data(item_ownerships.group(:owned).count) end end 我的问题是,这个方法应该放在哪里,如何使用rspec进行单元测试?我目前已经在模型中得到了它,但是在尝试用rspec测试它时,我的规格如下所示: let(:values) {
class MyModel < ActiveRecord::Base
def ownership_data
format_data(item_ownerships.group(:owned).count)
end
end
我的问题是,这个方法应该放在哪里,如何使用rspec进行单元测试?我目前已经在模型中得到了它,但是在尝试用rspec测试它时,我的规格如下所示:
let(:values) { { "yes" =>2 } }
it "it will return 2 values" do
result = MyModel.new.format_data(values)
expect(result.keys.count).to eq(2)
end
我对必须实例化模型实例来测试这一点不太满意。感谢您的指导。正如AJ在评论中提到的,我们可能需要更多信息来提供更具体的建议。无论如何我会给你一些
如果你有一个不一定依赖于模型本身的对象,你应该考虑把它移到A或A。它们可以位于单独的文件夹(lib/services)或模型文件夹中,而无需从
ActiveRecord::Base
继承
您的方法也可以是类方法def self.method\u name(values,values\u 2)
,而不是实例方法(如果您不需要模型中的特定值)
当涉及到为我的项目报告的数据操作时,我为“lib/reports”下的对象构建了特定的ruby服务对象文件夹,它们获取原始数据(通常在init方法中)并从方法调用返回格式化数据(如果相同的数据可以在不同的输出选项中格式化,则允许我进行多次调用)。这使得它们与模型分离。而且,这使得测试变得容易(在
类中传入已知值。新的在方法输出中预期特定值。您对这个问题的泛化太多了,很难说方法的用途是什么。您可能正在输入JavaScript库、API或视图。这将通知您可以将方法放在何处。我要说的是AModel。新的是一个非常复杂的问题要调用“廉价”方法,它不会查询或保存到数据库,因此实例化它不会有很大的开销。该方法所做的是获取ActiveRecord查询项的结果\u ownerships.group(:owners.count),如果其中只有一个值(仅“是”或“否”),向其添加第二个值,使其始终包含“是”和“否”的值"。它严格地处理activerecord查询的结果。为什么您对必须实例化一个模型来测试模型方法感到不高兴?在任何情况下,都可以说此方法属于装饰器、演示器或简单的实用程序类。该方法基本上是一个实用程序,用于获取查询提供的数据,并对其进行较大的处理,以使其能够对其他东西来说是可以理解的。只是实例化一个模型类来测试它感觉不对。仅此而已。
let(:values) { { "yes" =>2 } }
it "it will return 2 values" do
result = MyModel.new.format_data(values)
expect(result.keys.count).to eq(2)
end