使用Rails环境测试带Rspec的Rake任务

我正在尝试测试一个rake任务,它在其中使用了一个活动记录。

require 'spec_helper' require 'rake' load File.join(Rails.root, 'lib', 'tasks', 'survey.rake') describe "survey rake tasks" do describe "survey:send_report" do it "should send a report" do Rake::Task['survey:send_report'].invoke end end end 

当我运行此规范rspec spec/lib/survey_spec.rb ,我收到此错误“

 RuntimeError: Don't know how to build task 'environment' 

如何通过示例规范加载:enviroment任务?

我认为你应该首先加载任务:

 require 'rake' MyRailsApp::Application.load_tasks 

然后调用你的任务:

 Rake::Task['survey:send_report'].invoke 

我怀疑问题是您的survey:send_report任务取决于:environment但您尚未加载定义:environment任务的文件。 这将在某个地方的rails中,你的主Rakefile加载它。

所以,我想如果你改变了

 load File.join(Rails.root, 'lib', 'tasks', 'survey.rake') 

 load File.join(Rails.root, 'Rakefile') 

它会工作的。

听起来像你的take任务可能需要加载Rails环境。 您可以通过将此行添加到before(:all)挂钩来存根:

 Rake::Task.define_task(:environment) 

您的任务是否添加:环境以前执行此操作? 在你的.rake文件中你应该有这样的东西:

 namespace :survey do # ... task :send_report => :enviroment do # ... stuff end 

这是因为您需要加载完整的环境来完成该任务。 您可以查看此有轨电视以获取更多信息http://railscasts.com/episodes/66-custom-rake-tasks