測試耙子任務
回答
Rake任務很難測試。最簡單的解決方案是將邏輯移入適當模型中的方法。然後你可以測試它,只需從rake任務中調用該方法即可。
這是很好覆蓋another SO question
我的建議,總之這裏重複,不嘗試測試rake任務:提取代碼進行測試,以一類,模型或LIB功能和測試它。然後只需使用rake調用函數並管理依賴關係。
喜歡的東西:
def execute_rake(file,task)
require 'rake'
rake = Rake::Application.new
Rake.application = rake
Rake::Task.define_task(:environment)
load "#{Rails.root}/lib/tasks/#{file}"
rake[task].invoke
end
在您的規格:
execute_rake("tags.rake","tags:popular")
rake [任務] .invoke而不是耙[標籤] .invoke – standup75 2011-04-18 19:41:58
真棒的答案。測試ram任務時,這件負載事物做了詭計。 – 2012-11-30 19:54:56
這是一個壞主意。這個工作,直到你需要使用耙運行你的測試。在這種情況下,您的測試將以非零退出代碼靜默失敗,但rspec將報告所有測試通過。 – 2016-05-16 20:27:41
我喜歡PivotalLabs' way最。不過,我概括和修改自己的代碼,隨後在我的應用程序:
# file: spec/tasks/my_rake_file_spec.rb
require 'spec_helper'
require 'rake'
describe 'my_rake_file.rake' do
before :all do
Rake.application.rake_require 'tasks/my_rake_file'
Rake::Task.define_task(:environment)
end
let(:run_rake_task) {
Rake::Task[task_name].reenable
Rake.application.invoke_task task_name
}
describe 'my_task_name' do
let(:task_name) { "my_task_name" }
it "creates 10 cars" do
run_rake_task
Car.count.should == 10
end
end
end
另外,我提取的my_rake_file.rake的代碼模塊,存儲在LIB繁重/
好了,現在有應該是一個寶石:
Fantaskspec - https://github.com/crismali/fantaskspec
- 1. 如何測試Minitest中的耙子任務?
- 2. 系統耙測試任務不運行我的測試
- 3. Rails:日誌耙子任務
- 4. 缺少耙子任務?
- 5. 添加子任務耙
- 6. 從運行耙子任務
- 7. 用耙測試任務測試一組特定的測試案例
- 8. 更改耙測任務以在測試環境中工作
- 9. 監測耙測試
- 10. 耙測試問題...耙報告「找不到任務./test/whatever-my-first-test-file-is.rb」
- 11. 我無法運行耙煉油廠的任務:測試:虛擬
- 12. 如何從測試程序中調用耙式任務
- 13. 創建我自己的耙測試:富任務
- 14. 紅寶石耙/測試任務產生不正確的命令
- 15. 使用表格運行耙子任務
- 16. 運行一個耙子任務軌道
- 17. 如何構建一個耙子任務
- 18. 未找到gem中的耙子任務
- 19. 需要幹起我的耙子任務
- 20. 耙子任務中的嵌套屬性
- 21. 包括寶石中的耙子任務
- 22. 測試優先Learn_Ruby 00_hello耙子中止
- 23. 如何解決我的耙子任務列表中缺少的「耙測試」問題?
- 24. 救援耙任務
- 25. 耙順序任務
- 26. 運行耙測試
- 27. 刮耙似乎遭受不必要緩存的耙子任務
- 28. 獲得耙測試,以查看子目錄中的測試..?
- 29. 耙具體的測試成功,但耙所有測試失敗
- 30. Rails的:耙分貝:測試:準備Vs的耙測試:準備
我認爲這是一個不錯的建議,但它並沒有回答這個問題。您不應該污染模型才能在數據上運行批處理腳本等。 – 2011-11-29 23:29:24
我在這裏有一個更好的答案:http://stackoverflow.com/a/926100/94120 – 2011-11-29 23:31:43