簡體   English   中英

如何在Ruby中聲明CSV文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM