2010-11-10 8 views
0

Lorsque j'exécute une des tâches rspec via rake, la base de données semble être supprimée et migrée, mais si je la lance via script/spec path/to/spec, elle ne le fait pas t. Y a-t-il une option que je peux définir pour que la spécification rake ne touche pas la base de données?"rake spec" migre la base de données à chaque fois

Répondre

1

Il ne doit pas exécuter de migrations, en important uniquement db/schema.rb dans votre base de données de test. C'est le comportement attendu de sorte que vos tests utilisent une nouvelle copie du schéma de base de données avant de s'exécuter. Quel est votre raisonnement pour ne pas vouloir actualiser la base de données de test?

+0

Y at-il un moyen de désactiver cela? Pour une raison quelconque, les développeurs de ce projet ont décidé de ne pas utiliser les migrations de rails pour gérer la base de données, l'importation de schema.rb n'est donc pas une option valide. – AdamB

+0

Si vous avez une tâche rspec.rake, recherchez une ligne contenant db: test: préparez et commentez. Cela devrait l'empêcher d'essayer de charger le schéma. Sans schéma, comment comptez-vous construire la base de données de test? –

+0

qui a fait l'affaire, merci! – AdamB

1

Pour ce que je fais, je le veux définitivement. Donc, avec rspec 2.5.0 et rails 3:

Copie rspec.rake à votre apps/lib/tâches de:

~/.rvm/gems/ruby-1.8.7-p302/gems/rspec-rails-2.5.0/lib/rspec/rails/tasks/rspec.rake 

Ajouter ce au début du fichier:

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

Rechercher et modifier cette ligne pour forcer un noop:

spec_prereq = :noop #Rails.configuration.generators.options[:rails][:orm] == :active_record ? "db:test:prepare" : :noop 
0

J'ai eu ce même problème aussi lors de l'exécution rspec de la ligne de commande. Dans mes cas, je travaillais avec une base de données héritée qui n'avait aucune migration, donc les tests échouaient parce que les migrations ne pouvaient pas être exécutées.

La solution est de modifier le fichier de spécification/spec_helper.rb et supprimez la ligne suivante:

ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) 

Après que les tests ont couru sans faillir.

Questions connexes