繁体   English   中英

在Rails环境下使用Rspec测试Rake任务

[英]Testing Rake task with Rspec with Rails environment

我正在尝试测试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任务的文件。 那会在某个地方,您的主Rakefile会加载它。

所以,我想如果你改变

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

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

会的。

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

Rake::Task.define_task(:environment)

您的任务是否添加了:enviroment来完成? 在您的.rake文件中,您应该具有以下内容:

namespace :survey do
# ...

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

这是因为您需要加载整个环境才能执行此任务。 您可以检查此铁路广播以获取更多信息http://railscasts.com/episodes/66-custom-rake-tasks

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM