У меня есть простое приложение rails, где я импортирую данные из csv в мое приложение rails, которое работает нормально, , но я понятия не имею, с чего начать тестирование этой задачи rake, а также где в модульном приложении rails . Любая помощь будет оценена. Спасибо!
Подсказка
Моя структура Rails немного отличается от традиционных структур rails, так как я написал приложение Modular Rails. Моя структура на картинке ниже:
![My Rails Structure](https://i.stack.imgur.com/88Ohx.png)
Двигатели / csv_importer / Библиотека / Задачи / web_import.rake
Задание rake, импортируемое из csv ..
require 'open-uri'
require 'csv'
namespace :web_import do
desc 'Import users from csv'
task users: :environment do
url = 'http://blablabla.com/content/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 в моей родительской структуре
Это делает движок csv_importer доступным в корне приложения.
Rails.application.routes.draw do
mount CsvImporter::Engine => '/', as: 'csv_importer'
end
Для корректной миграции в корень приложения я добавил инициализатор
/ Двигатели / csv_importer / Библиотека / csv_importer / engine.rb
module CsvImporter
class Engine < ::Rails::Engine
isolate_namespace CsvImporter
# This enables me to be able to correctly migrate the database from the parent application.
initializer :append_migrations do |app|
unless app.root.to_s.match(root.to_s)
config.paths['db/migrate'].expanded.each do |p|
app.config.paths['db/migrate'] << p
end
end
end
end
end
Так что с этим объяснением я могу запускать приложение rails, как и любое другое приложение rails. Я объяснил это, так что любой, кто поможет, поймет, с чем мне помочь в отношении написания теста для граблей в двигателе.
Что я сделал в отношении написания ТЕСТА
task import: [:environment] do
desc 'Import CSV file'
task test: :environment do
# CSV.import 'people.csv'
Rake::Task['app:test:db'].invoke
end
end
Как кто-то может написать тест для граблей в модульном приложении? Спасибо!