Ответ 1
Вы можете вызвать задачи Rake следующим образом:
require 'rake'
Rake::Task[name].invoke
В этом случае это приведет к следующему коду:
require 'rake'
Rake::Task['db:test:purge'].invoke
Я создаю набор тестов интеграции, и есть одна бит логики, для которой мне нужна чистая база данных. Как запустить задачу db:test:purge
внутри одного из моих тестов?
Я использую: ruby 1.9.2, rails 3.0.9, rspec 2.6
Вы можете вызвать задачи Rake следующим образом:
require 'rake'
Rake::Task[name].invoke
В этом случае это приведет к следующему коду:
require 'rake'
Rake::Task['db:test:purge'].invoke
Утвержденный ответ не сработал у меня, когда мне нужно было выполнить свою собственную задачу рейка
Здесь мое решение
Вставьте верхнюю часть спецификационного файла
require 'rake'
Поместите эти строки, где вам нужно выполнить свою собственную команду rake, например. rake update_datastrong > из файла example.rake
load File.expand_path("../../../lib/tasks/example.rake", __FILE__)
# make sure you set correct relative path
Rake::Task.define_task(:environment)
Rake::Task["update_data"].invoke
Моя среда:
rails (4.0.0)
ruby (2.0.0p195)
rspec-core (2.14.7)
rspec-expectations (2.14.3)
rspec-mocks (2.14.4)
rspec (2.14.1)
rspec-rails (2.14.0)
Если нам нужно использовать несколько задач рейка, мы можем добавить
require "rake"
Rails.application.load_tasks
Затем просто вызовите любую задачу.
Rake::Task['sync:process_companies'].invoke
Хотя я не могу подтвердить, если он медленнее, потому что он загружает все задачи