Могу ли я переопределить задачу: среду в test_helper.rb для тестирования граблей? - PullRequest
10 голосов
/ 29 мая 2009

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

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

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

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

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, чтобы мой рейк-тест взаимодействовал с моей тестовой базой данных, а не с рабочей? Я попытался переопределить задачу в файле помощника, но это не работает.

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

Ответы [ 3 ]

9 голосов
/ 29 мая 2009

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

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

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

РЕДАКТИРОВАТЬ: Раньше здесь было сообщение в блоге здесь , в котором (а) говорится то же самое, а (б) - лучше. Похоже, он тоже это сказал первым.

1 голос
/ 20 марта 2010

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

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

0 голосов
/ 11 июня 2009

когда вы запускаете тестовую среду, то загружается - это тест.

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

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

...