2009-07-08 7 views
10

Chaque fois que je veux exécuter Rake test, la tâche db: test: prepare est appelée et elle reconstruit ma base de données d'environnement de test à partir de schema.rb et de migrations. Ce que je voudrais faire est de désactiver l'appel de db: test: préparer quand je veux tester l'application Rails. Est-il possible sans modifier Rails gem?Comment empêcher Rake test d'appeler task db: test: prepare

Répondre

13

Voici une solution que j'ai vu autour de:

Dans votre Rakefile:

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

En 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

J'aime ça. Avec cela, vous n'avez pas besoin d'installer de plugin et cela fonctionne bien. Cependant, qu'en est-il si je veux utiliser la méthode de préparation dans le futur? Est-il possible de le garder seulement le retirer de la file d'attente de Rake? –

+0

Dans ce cas, je suppose que vous devrez utiliser cette méthode pour réécrire 'test: units',' test: fonctionnels', et 'test: integration' pour qu'ils n'héritent pas du' db: test: prepare 'tâche. – mckeed

+0

En fait, je n'ai pas testé, mais vous pourriez probablement changer 'remove_task' à: ' def rename_task (nom_de_la_tâche, new_task_name) @tasks [new_task_name] = @ tasks.delete (nom_de_la_tâche) end' Vous Il faudra encore réécrire 'db: test: prepare' car les tâches de test continueront de l'exécuter. – mckeed

5

Il existe un plugin qui prend soin de cela pour vous: override_rake_task. Voici un exemple d'utilisation rapide:

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

Pour certains ancienne version de rails - vous pouvez placer Rake::Task['db:test:prepare'].clear à la fin de votre Rakefile