[英]Rails 4: PG::InFailedSqlTransaction when testing a rake task with RSpec
[英]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.