Pourquoi ai-je été invité à exécuter ‘rake db: migrate RAILS_ENV = test’?

Sur Rails 4.0.0.rc1, Ruby 2.0.0, après avoir exécuté une migration, je vois l’erreur suivante lorsque j’essaie d’exécuter un test via rspec :

/Users/peeja/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/activerecord-4.0.0.rc1/lib/active_record/migration.rb:376:in `check_pending! ‘: Les migrations sont en attente; Exécuter ‘rake db: migrer RAILS_ENV = test’ pour résoudre ce problème. (ActiveRecord :: PendingMigrationError)

Cela ne semble pas correct. Personne ne migre leur firebase database de test, n’est-ce pas? Ils db:test:prepare -le qui, pour être juste, j’ai oublié de le faire. Donc, je lance rake db:test:prepare et lance à nouveau ma commande rspec … et vois la même erreur.

Si je rake db:migrate RAILS_ENV=test réellement rake db:migrate RAILS_ENV=test , l’erreur disparaît en fait.

Que se passe-t-il? Est-ce nouveau dans Rails 4?

A partir de Rails 4.1, les tâches rake db:test:* sont obsolètes. Au lieu de cela, votre (test|spec)_helper.rb devrait inclure:

 ActiveRecord::Migration.maintain_test_schema! 

Cela signifie que votre firebase database de test obtiendra le schéma correct à chaque exécution de vos tests, que vous les exécutiez ou non à partir d’une tâche Rake.

Ressemble au rake test:prepare travaux, pas sûr de ce que db:test:prepare maintenant le fait.

J’ai parfois du mal à régler ce problème quand je suis juste la réponse d’une personne, j’ai donc jeté un couple pour obtenir de meilleurs résultats. Voici les étapes que je prends, je ne sais pas lesquelles sont inutiles, mais cela fonctionne à la fin.

  1. Ajoutez ActiveRecord::Migration.maintain_test_schema! en haut du fichier test_helper.rb.
  2. rake test:prepare
  3. rake db:migrate
  4. rake db:migrate RAILS_ENV=test

Ensuite, lorsque bundle exec rake test exécutions de bundle exec rake test j’obtiens des résultats nets à chaque fois, sans migrations en attente. (C’est ce que je fais juste après avoir généré l’échafaud la première fois). Quelqu’un est libre de me corriger si vous savez avec certitude que l’une de ces étapes n’est absolument pas nécessaire, mais c’est comme ça que je m’assure que cela fonctionne à chaque fois.

Vous pouvez aussi essayer

 rake db:migrate RAILS_ENV=test 

qui fonctionne comme

 db:test:prepare 

Est-ce que:)

J’ai trouvé ce problème lorsque chruby pour gérer mes versions ruby. Appels Rails bin/rails db:test:prepare via la commande système. Cela ne profite pas des chrubys $PATH env var, donc il s’exécute comme n’importe quel système ruby, et échoue en raison de gemmes manquantes. Malheureusement, je n’ai pas de solution pour le moment.

Vous pouvez essayer de définir la commande BEFORE variable, comme ceci. Cette déclaration a résolu mon problème:

 RAILS_ENV=test rake db:migrate