Тестирование задачи Rake с помощью Rspec с средой Rails - программирование
Подтвердить что ты не робот

Тестирование задачи Rake с помощью Rspec с средой 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

Когда я запускаю эту спецификацию rspec spec/lib/survey_spec.rb, я получаю эту ошибку "

RuntimeError:
   Don't know how to build task 'environment'

Как загрузить задачу: enviroment внутри в примере spec?

4b9b3361

Ответ 1

Я думаю, что вы должны сначала загрузить задания:

require 'rake'
MyRailsApp::Application.load_tasks

а затем вызовите свою задачу:

Rake::Task['survey:send_report'].invoke

Ответ 2

Я подозреваю, что проблема в том, что ваша задача survey:send_report зависит от :environment, но вы не загрузили файл, определяющий задачу :environment. Это будет где-то в рельсах, и ваш основной Rakefile загрузит его.

Итак, я думаю, если вы измените

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

к

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

он будет работать.

Ответ 3

Похоже, что для вашей задачи может потребоваться загрузка среды Rails. Вы можете отключить это, добавив эту строку к своему крюку (: all):

Rake::Task.define_task(:environment)

Ответ 4

Является ли ваша задача добавлением: enviroment, чтобы сделать это раньше? В вашем файле .rake у вас должно быть что-то вроде этого:

namespace :survey do
# ...

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

Это потому, что вам нужно загрузить полную среду для выполнения этой задачи. Вы можете проверить эту передачу, чтобы получить дополнительную информацию http://railscasts.com/episodes/66-custom-rake-tasks