Автоматически запускать гем-задачи в тестовой среде - PullRequest
0 голосов
/ 04 декабря 2010

У меня есть гем Rails 3, в котором есть некоторые грабли, которые нужно запускать только в тестовой среде.Работать в других средах не имеет смысла.

Моя проблема в том, что Rake загружает систему Rails, чтобы найти мои задачи в моем геме.Таким образом, к тому времени, когда он добирается до моих задач, Rails уже загружен в среду разработки (или любую среду, указанную пользователем).Это означает, что для правильного выполнения моих задач с граблями пользователь должен выполнить:

RAILS_ENV=test rake mytask

Поскольку моя задача имеет смысл только в «тестовой» среде, это раздражает, так как я бы предпочел, чтобы пользователь мог простотип:

rake mytask

Это похоже на то, как test: unit и test: функционалы автоматически предполагают среду тестирования, и пользователю не нужно указывать RAILS_ENV = test в командной строке.Итак, вопрос в том, как мне изменить мой тест, чтобы Rails переключился на тестовую среду?

Мой текущий обходной путь:

Rails.env = 'test'
ActionMailer::Base.delivery_method = :test
require Rails.root.join('test/test_helper')

Кажется, что это работает, но все еще регистрируется вlog / development.log, и я думаю, что он все еще работает с конфигурацией "development".У кого-нибудь есть идеи?Взгляд на то, как тестовые задачи определены в самом Rails, не показывает, как это сделать, что я вижу.

https://github.com/rails/rails/blob/master/railties/lib/rails/test_unit/testing.rake

1 Ответ

3 голосов
/ 05 января 2011

ОБНОВЛЕНИЕ : я обновил свой код после получения входных данных от реализации Эрика в https://github.com/eric1234/test_inline/commit/fe3da7efa3a2cdb7824c23cfa41697b0ceb9e8e2. Оригинальный код см. - https://stackoverflow.com/posts/4600524/revisions

desc "Do something in Test environment"
task :example => :environment do
  if not Rails.env.test?
    Dir.chdir(Rails.root) do
      system "rake example RAILS_ENV=test"
    end
  else
    #.... stuff ....
  end
end

Я не сделалПроверьте правильность кода, но вы поняли, верно?

...