2009-05-29 2 views
10

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

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 

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

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

ответ

8

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

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

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

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

+0

Спасибо за ваш ответ Майк. В то же время я немного поработал с Rake, и я думаю, что эти два метода в test_helper.rb могут быть каким-то образом к решению. Защиту rake_up Rake.application = Rake :: Application.new Rake :: Task.define_task: среда Rake.application конец Защиту rake_down Rake.application = ноль конец –

+0

Ссылка на этот пост блога появится быть мертвым. Единственное место, где я мог найти содержание, можно найти здесь: [Что делать в задачах Rake] (http://www.artima.com/forums//threaded.jsp?forum=123&thread=251328) – ThomasW

0

Когда вы используете тестовую среду, это загружаемый тест.

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

Так что я не вижу никаких причин, чтобы переопределить свою задачу грабли в test_helper.rb

1

Я думаю, что вы ищете этой линии: требуют (File.join (RAILS_ROOT, «конфигурации», «окружающая среда»)) это именно то, что вы найдете в разделе «задача: окружающая среда» реализации

Я использую его, чтобы проверить мои грабли задачи с помощью RSpec