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.
ActiveRecord::Migration.maintain_test_schema!
en haut du fichier test_helper.rb. rake test:prepare
rake db:migrate
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