use*_*677 20 ruby rspec ruby-on-rails
我正在尝试测试一个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
Run Code Online (Sandbox Code Playgroud)
当我运行此规范时rspec spec/lib/survey_spec.rb
,我收到此错误"
RuntimeError:
Don't know how to build task 'environment'
Run Code Online (Sandbox Code Playgroud)
如何通过示例规范加载:enviroment任务?
Erd*_*zer 32
我认为你应该首先加载任务:
require 'rake'
MyRailsApp::Application.load_tasks
Run Code Online (Sandbox Code Playgroud)
然后调用你的任务:
Rake::Task['survey:send_report'].invoke
Run Code Online (Sandbox Code Playgroud)
我怀疑问题是你的survey:send_report
任务取决于:environment
你没有加载定义:environment
任务的文件.那将是某个地方的轨道,而你的主要Rakefile
载入它.
所以,我想如果你改变了
load File.join(Rails.root, 'lib', 'tasks', 'survey.rake')
Run Code Online (Sandbox Code Playgroud)
至
load File.join(Rails.root, 'Rakefile')
Run Code Online (Sandbox Code Playgroud)
它会工作的.
听起来像你的take任务可能需要加载Rails环境.您可以通过将此行添加到before(:all)挂钩来存根:
Rake::Task.define_task(:environment)
Run Code Online (Sandbox Code Playgroud)
您的任务是否添加了 :environment 来执行此操作?在你的 .rake 文件中你应该有这样的内容:
namespace :survey do
# ...
task :send_report => :enviroment do
# ... stuff
end
Run Code Online (Sandbox Code Playgroud)
这是因为您需要加载完整的环境才能完成该任务。您可以查看此 Railcast 以获取更多信息http://railscasts.com/episodes/66-custom-rake-tasks
归档时间: |
|
查看次数: |
10021 次 |
最近记录: |