【发布时间】:2018-10-17 12:54:14
【问题描述】:
我有一个简单的 rails 应用程序,我将数据从 csv 导入到运行正常的 rails 应用程序中,但我不知道从哪里开始测试这个 rake 任务,以及模块化 rails 应用程序的位置。任何帮助,将不胜感激。谢谢!
csv_importer.task
require 'csv_importer/engine'
task users: :environment do
desc 'Import users from csv'
WebImport.new(url: 'http://blablabla/people.csv').call
end
csv_importer.rb
require 'csv_importer/engine'
class WebImport
def initialize(url)
@url = url
end
def call
url = 'http://blablabla/people.csv'
# I forced encoding so avoid UndefinedConversionError "\xC3" from ASCII-8BIT to UTF-8
csv_string = open(url).read.force_encoding('UTF-8')
counter = 0
duplicate_counter = 0
user = []
CSV.parse(csv_string, headers: true, header_converters: :symbol) do |row|
next unless row[:name].present? && row[:email_address].present?
user = CsvImporter::User.create row.to_h
if user.persisted?
counter += 1
else
duplicate_counter += 1
end
end
p "Email duplicate record: #{user.email_address} - #{user.errors.full_messages.join(',')}" if user.errors.any?
p "Imported #{counter} users, #{duplicate_counter} duplicate rows ain't added in total"
end
end
我做了什么:
csv_importer_test.rb
require 'test_helper'
require 'rake'
class CsvImporter::Test < ActiveSupport::TestCase
test 'truth' do
assert_kind_of Module, CsvImporter
end
test 'override_application' do
@rake = Rake::Application.new
Rake.application = @rake
assert_equal @rake, Rake.application
end
test '' do
# something here
end
end
这很好用,可以填满我的数据库。如何编写 TestCase 来捕获此解决方案?
【问题讨论】:
-
@theTinMan 如果提及您不恰当,我深表歉意。我被告知要寻求你的帮助,因为你的回答往往会教。你能帮我解决这个问题吗?
标签: ruby-on-rails ruby rake rake-task rakefile