2009-07-08 3 views
10

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

ответ

13

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

В вашем Rakefile:

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

В 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 
+1

Мне это нравится. При этом вам не нужно устанавливать какой-либо плагин, и он работает хорошо. Однако, что, если я хочу использовать метод подготовки в будущем? Можно ли сохранить его только для удаления из очереди запуска Rake? –

+0

В этом случае, я думаю, вам придется использовать этот метод для перезаписи 'test: units',' test: functionals' и 'test: integration', чтобы они не наследовали от' db: test: prepare 'задача. – mckeed

+0

На самом деле, я не проверял это, но вы могли бы, вероятно, изменить 'remove_task' к: определение функции rename_task (TASK_NAME, new_task_name) @tasks [new_task_name] = @ tasks.delete (task_name) end' You 'все равно придется переписать 'db: test: prepare', потому что тестовые задачи все равно будут его запускать. – mckeed

5

Существует плагин, который позаботится об этом для вас: override_rake_task. Вот краткий пример использования:

namespace :db do 
    namespace :test do 
    override_task :prepare do; end 
    end 
end 
0

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

Смежные вопросы