我有一種方法在我的模型中返回數據,這些數據將被輸入到製圖寶石中。方法應該去哪裏(模型?,在別的地方)
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