Могу ли я переопределить task : environment в test_helper.rb для тестирования задач rake?

StackOverflow https://stackoverflow.com/questions/925407

  •  06-09-2019
  •  | 
  •  

Вопрос

У меня есть ряд задач rake в Rakefile, которые я хотел бы протестировать как часть моих спецификаций и т.д.Каждая задача определяется в форме:

task :do_somthing => :environment do
  # Do something with the database here
end

Где задача :environment устанавливает соединение с базой данных ActiveRecord / DataMapper и классы.Я не использую это как часть Rails, но у меня есть серия тестов, которые я хотел бы запустить как часть BDD.

Этот фрагмент иллюстрирует, как я пытаюсь протестировать задачи rake.

def setup
  @rake = Rake::Application.new
  Rake.application = @rake
  load File.dirname(__FILE__) + '/../../tasks/do_something.rake'
end

should "import data" do
  @rake["do_something"].invoke
  assert something_in_the_database
end

Итак, моя просьба о помощи - возможно ли переопределить задачу:environment в моем файле test_helper.rb, чтобы мое тестирование rake взаимодействовало с моей тестовой базой данных, а не с производственной?Я попытался переопределить задачу в вспомогательном файле, но это не сработало.

Любая помощь в поиске решения была бы замечательной, так как я зациклился на этом всю прошлую неделю.

Это было полезно?

Решение

Моим "решением" подобной проблемы было извлечь всю логику из моих файлов .rake и создать классы для выполнения задач, оставив только однострочный вызов в файле rake, который, я был уверен, не будет тестироваться слишком усердно.Затем классы можно было бы протестировать практически в обычном режиме.

Я не знаю, насколько хорошо это соответствовало бы сложному набору взаимозависимых задач, которые поддерживают некое далеко идущее состояние:вероятно, не очень хорошо, но опять же, это, скорее всего, указывает на какую-то другую проблему дизайна...

Мне любопытно посмотреть, не пропустил ли я чего-нибудь получше.

Редактировать:Раньше там была запись в блоге здесь это (а) говорит то же самое и (б) говорит лучше.Похоже, он тоже сказал это первым.

Другие советы

Я думаю, вы ищете эту строку:требовать(File.join(RAILS_ROOT, 'config', 'environment')) это именно то, что вы найдете в реализации "задача: среда"

Я использую его для тестирования своих задач rake с использованием rspec

когда вы запускаете тесты, загружаемая среда является тестовой.

таким образом, вы взаимодействуете только с тестовой базой данных.

Так что я не вижу никаких причин переопределять вашу задачу rake в test_helper.rb

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top