[英]How to assert a CSV file in Ruby
有沒有一種好的方法來在Ruby中聲明CSV文件的內容?
我了解如何使用CSV庫以及如何在CSV文件中進行讀取,但這會導致一長串的斷言,例如:
`assert_equal("0", @csv_array[0].field('impressions'))
assert_equal("7", @csv_array[0].field('clicks'))
assert_equal("330", @csv_array[0].field('currency.GBP.commissions'))
assert_equal("6", @csv_array[0].field('currency.GBP.conversions'))
assert_equal("3300", @csv_array[0].field('currency.GBP.ordervalue'))`
是否有某種文件比較器,所以我可以寫:
assert_equal(expected.csv ,actual.csv )
或類似的規定?
這個怎么樣:
expected_csv = "impressions,clicks,currency.GBP.comiisions,currency.GBP.conversions,currency.GBP.ordervalue
0,7,330,6,3300"
actual_csv = File.open('actual.csv').read
assert_equal(expected_csv, actual_csv)
如果CSV文件的全部內容只有2行,那應該可以工作。 否則,您將不得不操作actual_csv
來獲取要測試的零件。 您可以這樣做:
IO.readlines('actual.csv')[3]
那將使您獲得第三行。 然后,您可以將其與標題行連接,或者將其與沒有標題的字符串進行比較。
如果必須測試非常好的輸出,則可能會發現批准測試是一種有趣的方法。 基本上,輸出是在您第一次運行測試時保存的。 然后,您可以手動檢查輸出,如果正確,請批准。 在后續運行中,輸出不同時將出現錯誤。
我創建了一種快速而骯臟的方法來執行此操作,有時我可能會將其清理並變成寶石。 https://gist.github.com/bpardee/513b4a15e5ebdc596e0b
例如,以下代碼:
file = 'test.csv'
File.open(file, 'w') do |fout|
fout.puts "foo,bar,zulu\n1,2,3\n4,5,6"
end
assert_csv(file) do |csv|
csv << %w(foo bar warrior)
csv << [1,3,5]
csv << [4,5,6]
end
將導致:
Missing columns: ["zulu"]
Unexpected columns: ["warrior"]
The following mismatches were found in line 2:
bar actual=3 expected=2
由於所有內容都已加載到內存中,因此我不建議在大型csv文件中使用此功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.