测试佣金任务

我正在开发一个依赖于许多自定义Rake任务的ROR应用程序。

测试它们的最佳方法是什么?

耙子任务很难测试。 最简单的解决方案是将逻辑移动到适当模型中的方法中。 然后,您可以测试它,并从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") 

这在另一个SO问题中已经很好地涵盖了

我的建议在此总结,不是尝试测试rake任务:将要测试的代码提取到类,模型或lib函数并在那里进行测试。 然后只需使用rake调用函数并管理依赖项。

我最喜欢PivotalLabs的方式 。 但是,我在我的应用程序中概括并修改了他们的代码:

 # 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 /中

那么,现在有一个gem:

Fantaskspec – https://github.com/crismali/fantaskspec