[英]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.