2014-08-29 85 views
1

有沒有一種很好的方式來在Ruby中聲明CSV文件的內容?如何在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) 

或沿着這些線?

+0

爲什麼不對兩者運行MD5檢查並比較這些值?如果您使用* nix或Mac OS,請參閱'man md5'。 – 2014-10-07 23:56:24

回答

2

如何:

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] 

這會讓你第三行。然後,您可以與標題行連接或與不包含標題的字符串進行比較。

+0

謝謝,它有很多行,所以去你的第二個解決方案工作 – charlietaylor 2014-08-29 12:54:46

0

如果您必須測試非常輸出,您可能會發現approval testing一個有趣的方法。基本上,輸出在您的測試第一次運行時被保存。然後您可以手動檢查輸出並在正確的情況下批准它。在後續運行中,輸出不同時會出現錯誤。

0

我創建了一個快速和骯髒的方法來做到這一點,我可以清理並在某些時候變成寶石。 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文件,因爲一切都被加載到內存推薦這樣做。

相關問題