我有一种方法在我的模型中返回数据,这些数据将被输入到制图宝石中。方法应该去哪里(模型?,在别的地方)
class MyModel < ActiveRecord::Base
def ownership_data
format_data(item_ownerships.group(:owned).count)
end
end
我需要保证数据返回结果中总是有2个值。是这样的:
{ “是”=> 4, “否”=> 2}
为了做到这一点,我写这是在第一方法中使用的另一种方法:
def format_data(values)
values[false].nil? ? values = values.merge({ "no" => 0 }) : true
values[true].nil? ? values = values.merge({ "yes" => 0 }) : true
return values
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
我不是太高兴不必实例模型的实例来测试这个。任何指导表示赞赏。
您已经将此问题泛化了一些,很难说出方法的用途。图书馆,或API,或你的意见,这将告诉你可以把方法放在哪里 – AJFaraday
我要说的是AModel.new是一个非常“便宜”的方法来调用,它不查询或保存到数据库,因此它没有实例化的重要成本 – AJFaraday
该方法所做的是采用ActiveRecord查询item_ownerships.group(:owned).count的结果,如果它只有一个值(仅“yes”或只有“否”),为其添加第二个值,以便它始终包含“是”和“否”的值。严格控制活动记录查询的结果。 – Agazoom