在 Ruby Test::Unit 中存根 CSV 文件
Stub a CSV file in Ruby Test::Unit
所以我有一个 Ruby 脚本,它将 CSV 文件解析为规则列表并进行一些处理,returns 将哈希数组作为已处理数据。
CSV 看起来像这样:
id_number,rule,notes
1,"dummy_rule","necessary"
2,"sample_rule","optional"
CSV 的解析如下所示:
def parse_csv(file_name)
filtered_data = []
CSV.foreach(file_name, headers: true) do |row|
filtered_data << row # some processing
end
filtered_data
end
现在我想知道是否可以 stub/mock 一个用于单元测试的实际 CSV 文件,以便我可以将 "filename" 传递给此函数。我可以制作一个 CSV 对象并使用生成函数,但实际的文件名将不可能。
def test_parse_csv
expected_result = ["id_number"=>1, "rule"=>"dummy_rule", "notes"=>"optional"}]
# stub/mock csv with filename: say "rules.csv"
assert.equal(expected_result, parse_csv(file_name))
end
我用Test::Ruby
我还找到了一个名为 mocha 的 ruby gem 库,但我不知道它如何用于 CSVs
https://github.com/freerange/mocha
欢迎任何想法!
我会在您的测试目录中创建一个支持目录,然后创建一个文件..
# test/support/rules.csv
id_number,rule,notes
1,"dummy_rule","necessary"
2,"sample_rule","optional"
您的测试应该如下所示,还添加了一个左大括号,看起来您在第 2 行中错过了。
def test_parse_csv
expected_result = [{"id_number"=>1, "rule"=>"dummy_rule", "notes"=>"optional"}]
assert.equal(expected_result, parse_csv(File.read(csv_file)).first)
end
def csv_file
Rails.root.join('test', 'support', 'rules.csv')
end
编辑:抱歉,我应该注意到这不是 Rails 上的 Ruby...这是一个 ruby 解决方案:
def test_parse_csv
expected_result = [{"id_number"=>1, "rule"=>"dummy_rule", "notes"=>"optional"}]
assert.equal(expected_result, parse_csv(csv_file).first)
end
def csv_file
File.read('test/support/rules.csv')
end
我在测试中这样做 let(:raw_csv) { "row_number \n 1 \n 2" }
,告诉自己 CSV 文件肯定被读取为带有换行符和逗号的简单字符串...而且它工作正常。小心额外的空格和逗号,很容易出错。
所以我有一个 Ruby 脚本,它将 CSV 文件解析为规则列表并进行一些处理,returns 将哈希数组作为已处理数据。
CSV 看起来像这样:
id_number,rule,notes
1,"dummy_rule","necessary"
2,"sample_rule","optional"
CSV 的解析如下所示:
def parse_csv(file_name)
filtered_data = []
CSV.foreach(file_name, headers: true) do |row|
filtered_data << row # some processing
end
filtered_data
end
现在我想知道是否可以 stub/mock 一个用于单元测试的实际 CSV 文件,以便我可以将 "filename" 传递给此函数。我可以制作一个 CSV 对象并使用生成函数,但实际的文件名将不可能。
def test_parse_csv
expected_result = ["id_number"=>1, "rule"=>"dummy_rule", "notes"=>"optional"}]
# stub/mock csv with filename: say "rules.csv"
assert.equal(expected_result, parse_csv(file_name))
end
我用Test::Ruby
我还找到了一个名为 mocha 的 ruby gem 库,但我不知道它如何用于 CSVs
https://github.com/freerange/mocha
欢迎任何想法!
我会在您的测试目录中创建一个支持目录,然后创建一个文件..
# test/support/rules.csv
id_number,rule,notes
1,"dummy_rule","necessary"
2,"sample_rule","optional"
您的测试应该如下所示,还添加了一个左大括号,看起来您在第 2 行中错过了。
def test_parse_csv
expected_result = [{"id_number"=>1, "rule"=>"dummy_rule", "notes"=>"optional"}]
assert.equal(expected_result, parse_csv(File.read(csv_file)).first)
end
def csv_file
Rails.root.join('test', 'support', 'rules.csv')
end
编辑:抱歉,我应该注意到这不是 Rails 上的 Ruby...这是一个 ruby 解决方案:
def test_parse_csv
expected_result = [{"id_number"=>1, "rule"=>"dummy_rule", "notes"=>"optional"}]
assert.equal(expected_result, parse_csv(csv_file).first)
end
def csv_file
File.read('test/support/rules.csv')
end
我在测试中这样做 let(:raw_csv) { "row_number \n 1 \n 2" }
,告诉自己 CSV 文件肯定被读取为带有换行符和逗号的简单字符串...而且它工作正常。小心额外的空格和逗号,很容易出错。