Каждый раз, когда я хочу запустить тест Rake, вызывается задача db:test:prepare, которая перестраивает базу данных моей тестовой среды из schema.rb и миграции. Чего я хотел бы добиться, так это отключить вызов db:test:prepare, когда я хочу протестировать создание приложения Rails. Возможно ли это без изменения драгоценного камня Rails?
Как запретить тесту Rake вызывать задачу db:test:prepare
Ответы (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
Мне это нравится. При этом вам не нужно устанавливать какой-либо плагин, и он работает хорошо. Однако что, если я захочу использовать метод подготовки в будущем? Можно ли оставить его, только удалив его из очереди запуска Rake?
- person Edvinas Bartkus; 09.07.2009
В этом случае, я думаю, вам придется использовать этот метод, чтобы переписать
test:units
, test:functionals
и test:integration
, чтобы они не наследуются от задачи db:test:prepare
.
- person mckeed; 09.07.2009
На самом деле, я не проверял это, но вы, вероятно, могли бы изменить
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
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