11
votes

Migrations et RSPEC

Je développe une application Rails avec RSPEC pour les tests unitaires.

Il y a quelques semaines, RSPEC utilisait automatiquement la base de données vers la dernière version lors de l'exécution de «Spec Rake», mais cela ne le fait pas automatiquement, je dois tout mettre en œuvre pour moi-même.

Cela se produit dans l'environnement de test, car mes données de développement ne se désapprouvent pas.

est de ma faute? Je n'ai rien changé, je pense :)

Merci d'avance.


2 commentaires

Obtenez-vous des erreurs lorsque vous essayez d'exécuter "Rake Spec"?


Si je génère des migrations, un "tu as en attente des migrations" augmente. À ce stade, je dois migrer la base de données par moi-même et Rerun "Rake Spec"


6 Réponses :


22
votes

Typiquement ce que je fais est d'utiliser une commande d'alias qui exécute à la fois migrer et prépare la base de données de test.

alias migrate_databases='rake db:migrate && rake db:test:prepare'


1 commentaires

Je préfère résoudre le problème au lieu de le cacher, mais merci. BTW, désolé de répondre un mois plus tard :)



1
votes

Voici ma solution de contournement:

RakeFile: P>

require File.expand_path('../config/application', __FILE__)
require 'rake'
require "rspec/core/rake_task"

MyApp::Application.load_tasks

desc "Run specs"
RSpec::Core::RakeTask.new(:spec)

task :run_specs => ['db:test:clone', :spec] do

end

task :default => :run_specs


0 commentaires

11
votes

Ma solution pour rails 4:

in SPEC / SPEC_HELPER.RB CODE> ou n'importe où dans le code d'initialisation de l'environnement de test: P>

ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db/migrate'))


2 commentaires

Le dB: test: clone est amorcé dans les rails 4.1


Vous faites deux demandes SQL au lieu d'un seul en exécutant activerecord :: migrator.migrer (fichier.join (rails.root, «dB / migrate»)) pour le comportement et un code plus court.



0
votes

Voir si vous avez les suivants dans votre SPEC_HELPER.RB? Chaque fois que vous exécutez des spécifications, vérifie RSPEC s'il y a des migrations en attente.

#Checks for pending migrations before tests are run.
#If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)


0 commentaires

0
votes

Cela fonctionne même lorsque les rails ne sont pas chargés et que l'une des sql ne pose que la plupart du temps.

if defined?(ActiveRecord::Migrator)
  ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db', 'migrate'))
end


0 commentaires

8
votes

rails 4.1 Avancez Vous pouvez utiliser:

ActiveRecord::Migration.maintain_test_schema!


3 commentaires

Pouvez-vous me donner des détails sur la façon dont cela ne fonctionne pas? Est-ce que cela jette une erreur de quelque sorte? Vous devrez peut-être vous assurer que vos migrations sont également exécutées en mode DEV afin de fonctionner.


Il jette une erreur lorsque je crée une nouvelle migration puis exécutez RSPEC


Vous avez couru la migration d'abord avec Rake DB: migrer ?