Ответ 1
Я думаю, что вы должны сначала загрузить задания:
require 'rake'
MyRailsApp::Application.load_tasks
а затем вызовите свою задачу:
Rake::Task['survey:send_report'].invoke
Я пытаюсь проверить задачу 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 внутри в примере spec?
Я думаю, что вы должны сначала загрузить задания:
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. Вы можете отключить это, добавив эту строку к своему крюку (: 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