2009-05-29 49 views
10

我有一系列的Rake文件Rake任務,我想測試我的規格等各項任務在表單中定義的一部分:我可以重寫test_helper.rb中的task來測試rake任務嗎?

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

凡:環境任務設置一個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 

所以我請求幫助 - 這可能爲忽略的:在我的test_helper.rb中文件環境的任務,所以我我耙測試與我的測試數據庫交互,而不是生產的?我已經嘗試在幫助程序文件中重新定義任務,但這不起作用。

解決方案的任何幫助都很好,因爲過去一週我一直堅持這一點。

回答

8

我的「解決方案」,以類似的問題是從我的.rake文件中提取所有的邏輯和創建類執行的任務,只留下一個在耙文件一行調用,這是我在測試不感到有信心太難。然後可以正常地測試這些類。

我不知道這樣做能夠承受一組複雜的相互依賴的任務,這些任務會維持一些影響深遠的狀態:可能不太好,但是再次說明這很可能是其他一些設計問題的表現。 ..

我很好奇,看看我是否錯過了更好的東西。

編輯:曾經有一個博客帖子here是:(a)也說了同樣的事情,(B)表示,它更好。看起來他也是先說的。

+0

謝謝您的回答麥克來測試我的Rake任務。我已經做了多一些,在平均時間耙亂搞,我認爲在test_helper.rb中這兩種方法可能會爭取解決一些方法。 高清rake_up Rake.application =耙:: Application.new 耙:: Task.define_task:環境 Rake.application 結束 高清rake_down Rake.application =零 結束 – 2009-05-29 14:57:01

+0

似乎是博客文章的鏈接死了。我能找到的內容,唯一的地方就在這裏:什麼投入Rake任務(http://www.artima.com/forums//threaded.jsp?forum=123&thread=251328) – ThomasW 2012-02-23 08:38:47

0

當您正在運行測試環境時,正在加載的是測試。

因此您只與數據庫 進行交互。

,所以我不認爲有任何理由來覆蓋你的耙任務test_helper.rb中

1

我認爲你正在尋找這條線: 要求(File.join(RAILS_ROOT,「配置」,「環境」 )) 這正是你在「任務:環境」查找執行

我用它使用rspec的

相關問題