Как запретить тесту Rake вызывать задачу db:test:prepare

Каждый раз, когда я хочу запустить тест Rake, вызывается задача db:test:prepare, которая перестраивает базу данных моей тестовой среды из schema.rb и миграции. Чего я хотел бы добиться, так это отключить вызов db:test:prepare, когда я хочу протестировать создание приложения Rails. Возможно ли это без изменения драгоценного камня Rails?


person Edvinas Bartkus    schedule 08.07.2009    source источник


Ответы (3)


Вот решение, которое я видел вокруг:

В вашем Rakefile:

Rake::TaskManager.class_eval do
  def remove_task(task_name)
    @tasks.delete(task_name.to_s)
  end
end

In lib/tasks/db/test.rake:

Rake.application.remove_task 'db:test:prepare'

namespace :db do
  namespace :test do 
    task :prepare do |t|
      # rewrite the task to not do anything you don't want
    end
  end
end
person mckeed    schedule 09.07.2009
comment
Мне это нравится. При этом вам не нужно устанавливать какой-либо плагин, и он работает хорошо. Однако что, если я захочу использовать метод подготовки в будущем? Можно ли оставить его, только удалив его из очереди запуска Rake? - person Edvinas Bartkus; 09.07.2009
comment
В этом случае, я думаю, вам придется использовать этот метод, чтобы переписать test:units, test:functionals и test:integration, чтобы они не наследуются от задачи db:test:prepare. - person mckeed; 09.07.2009
comment
На самом деле, я не проверял это, но вы, вероятно, могли бы изменить remove_task на: def rename_task(task_name, new_task_name) @tasks[new_task_name] = @tasks.delete(task_name) end Вам все равно придется переписать db:test:prepare, потому что тестовые задачи все равно будут запускать его. - person mckeed; 09.07.2009
comment
mckeed, это то, что делает плагин, упомянутый в другом ответе. Но мне не нужно держать старую задачу. - person Benjamin Atkin; 23.11.2011

Об этом позаботится плагин: override_rake_task. Вот быстрый пример использования:

namespace :db do
  namespace :test do
    override_task :prepare do; end
  end
end
person Dave Pirotte    schedule 09.07.2009

Для некоторых более старых версий рельсов вы можете поместить Rake::Task['db:test:prepare'].clear в конец вашего Rakefile.

person tamersalama    schedule 10.12.2014