Rails 迷你测试 CSV.generate
Rails MiniTest CSV.generate
在我的 Rails 6 应用程序中,我想为负责创建 CSV 文件的服务编写 MiniTest。当负责它的服务使用 CSV.open
而不是像我的 CSV.generate
时,我发现了几个例子(比如 here)。我有以下代码:
# services/csv_log_generator
class CsvLogGenerator
LOG_HEADERS = ['Created at', 'Action Type', 'Acting User', 'New Data'].freeze
def call
CSV.generate(col_sep: ';', write_headers: true, headers: LOG_HEADERS, encoding: 'UTF-8') do |csv|
PaperTrail::Version.includes([:item]).where(item_type: 'CashTransaction').limit(99).order(id: :desc).each do |v|
tracked_data(v)
csv << [v.created_at.in_time_zone('London'),
v.event,
user_name(v),
@new_data_value]
end
end
end
# csv_log_generator_test
class CsvLogGeneratorTest < ActiveSupport::TestCase
setup do
Book.create!(title: 'title')
service.call
end
test 'something that needs versioning' do
with_versioning do
expected_csv = File.open(file_fixture('sample.csv')).read
assert_equal expected_csv
end
end
我不知道如何从 service.call
中获取这个新创建的 CSV 文件,以便我可以将它与 assert_equal
中的 expected_data 进行比较。
你的服务(我假设服务 CsvLogGenerator
本身是 returns 一个字符串,所以你的测试应该是这样的(除了我省略了明显不相关的 with_versioning
包装块)
class CsvLogGeneratorTest < ActiveSupport::TestCase
setup do
Book.create!(title: 'title')
end
test 'something that needs versioning' do
service = CsvLogGenerator.new
actual_csv = service.call
expected_csv = File.open(file_fixture('sample.csv')).read
assert_equal expected_csv, actual_csv
end
end
在我的 Rails 6 应用程序中,我想为负责创建 CSV 文件的服务编写 MiniTest。当负责它的服务使用 CSV.open
而不是像我的 CSV.generate
时,我发现了几个例子(比如 here)。我有以下代码:
# services/csv_log_generator
class CsvLogGenerator
LOG_HEADERS = ['Created at', 'Action Type', 'Acting User', 'New Data'].freeze
def call
CSV.generate(col_sep: ';', write_headers: true, headers: LOG_HEADERS, encoding: 'UTF-8') do |csv|
PaperTrail::Version.includes([:item]).where(item_type: 'CashTransaction').limit(99).order(id: :desc).each do |v|
tracked_data(v)
csv << [v.created_at.in_time_zone('London'),
v.event,
user_name(v),
@new_data_value]
end
end
end
# csv_log_generator_test
class CsvLogGeneratorTest < ActiveSupport::TestCase
setup do
Book.create!(title: 'title')
service.call
end
test 'something that needs versioning' do
with_versioning do
expected_csv = File.open(file_fixture('sample.csv')).read
assert_equal expected_csv
end
end
我不知道如何从 service.call
中获取这个新创建的 CSV 文件,以便我可以将它与 assert_equal
中的 expected_data 进行比较。
你的服务(我假设服务 CsvLogGenerator
本身是 returns 一个字符串,所以你的测试应该是这样的(除了我省略了明显不相关的 with_versioning
包装块)
class CsvLogGeneratorTest < ActiveSupport::TestCase
setup do
Book.create!(title: 'title')
end
test 'something that needs versioning' do
service = CsvLogGenerator.new
actual_csv = service.call
expected_csv = File.open(file_fixture('sample.csv')).read
assert_equal expected_csv, actual_csv
end
end