20

我正在尝试测试一个 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 任务?

4

4 回答 4

33

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

require 'rake'
MyRailsApp::Application.load_tasks

然后调用你的任务:

Rake::Task['survey:send_report'].invoke
于 2013-03-11T23:47:50.460 回答
10

我怀疑问题在于您的survey:send_report任务取决于:environment但您尚未加载定义:environment任务的文件。那将在某个地方的轨道上,您的主要Rakefile加载它。

所以,我想如果你改变

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

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

它会工作的。

于 2012-10-02T14:04:57.880 回答
9

听起来您的拍摄任务可能需要加载 Rails 环境。您可以通过将此行添加到您的 before(:all) 钩子中来解决这个问题:

Rake::Task.define_task(:environment)
于 2013-09-30T03:34:10.587 回答
0

您的任务是添加 :enviroment 吗?在你的 .rake 文件中,你应该有这样的东西:

namespace :survey do
# ...

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

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

于 2012-10-02T10:56:03.730 回答