首先忠告 - CSV可能是最壞的想象數據格式,除非絕對不可避免的,最好避免 - 一樣,如果客戶堅持在MS Excel操作的數據是一個好主意(它不是) 。
如果您必須使用CSV,請不要使用像.tags
這樣的方法名稱,這可能會導致常規的ActiveRecord關係混淆。
從文件系統讀取的測試方法可能相當困難。
首先,您可能需要更改方法的簽名,以便可以傳遞文件路徑。
def self.tags(file = "db/data.csv")
# ...
end
這樣,您可以傳遞一個夾具文件,以便您可以確定性地測試它。
RSpec.describe Image do
describe "tags" do
let(:file) { Rails.root.join('spec', 'support', 'fixtures', 'tags.csv') }
it 'returns an array' do
expect(Image.tags(file)).to eq [ { foo: 'bar' }, { foo: 'baz' } ]
end
end
end
但是你的方法是非常ideosyncratic -
def self.tags
t = "db/data.csv"
@arr = []
self.tags
使得一個類的方法還您聲明@arr作爲實例方法。
此外,Ruby的enumerable模塊提供了很多操作數組的方法,因此不需要在循環中使用外部變量。
def self.tags(file = "db/data.csv")
csv_data = CSV.read(file)
csv_data.shift
csv_data.compact # removes nil elements
end
來源
2016-05-23 16:35:46
max
這個問題有點寬泛,請添加詳細信息以縮小答案集或隔離問題。例如,你的模型的解釋 –