2010-12-03 69 views
0

我有一個Rails 3 gem,它有一些只能在測試環境中運行的rake任務。在其他環境中運行並不合理。在測試環境中自動運行gem任務

我的問題是Rake加載Rails系統,以便在我的寶石中找到我的任務。所以當它到達我的任務時,Rails已經加載到「開發」環境中(或用戶指定的任何環境)。這意味着,爲了運行我的Rake任務正確的用戶必須做到:

RAILS_ENV=test rake mytask 

由於我的任務只是使「測試」環境某種意義上說,這是惱人的,因爲我寧願用戶能夠只需鍵入:

rake mytask 

這類似於如何測試:單元和測試:泛函自動假設測試環境和用戶不需要在命令行來指定RAILS_ENV =測試。所以問題是如何修改我的測試,以便Rails切換到測試環境?

我目前的解決方法是:

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

這似乎在一定程度上工作,但它仍在記錄日誌/ development.log,我認爲這仍然是實際運行的「發展」的配置。任何人有任何想法?看看如何在Rails中定義測試任務本身並不能揭示如何做到這一點,我可以看到。

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

回答

3

更新:我在https://github.com/eric1234/test_inline/commit/fe3da7efa3a2cdb7824c23cfa41697b0ceb9e8e2採取輸入從Eric的實施後,更新了我的代碼。 對於原代碼看看 - 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 

我沒有檢查代碼的正確性,但是你的想法,對吧?

+0

天才!簡單並解決了我需要分叉的另一個問題,以避免一個任務與另一個任務相混淆。希望我有一些觀點,所以我可以給你一個很好的答案。我確實給你在提交信貸: https://github.com/eric1234/test_inline/commit/fe3da7efa3a2cdb7824c23cfa41697b0ceb9e8e2 – 2011-01-29 17:23:48