Je suis sur Rails 4 et j'ai remarqué que certains de mes tests RSpec échouent parce que certains de mes refactorings de test utilisent un filtre avant (probablement à cause des transactions). Cet article décrit un problème similaire:
la base de données de test des rails ne s'efface pas après certaines exécutions
Au lieu d'utiliser la gemme DatabaseCleaner, existe-t-il une commande rake pour effacer la base de données de test? Je crois que rake db:test:prepare
c'est obsolète dans Rails 4. Aussi, si avant des transactions comme
post :create, user: Fabricate.attributes_for(:user)
sont persistants. Existe-t-il une autre manière de refactoriser pour éviter d'avoir à effacer manuellement la base de données de test?
la source
ApplicationRecord
place deActiveRecord::Base
blog.bigbinary.com/2015/12/28/…rake db:structure:load
si vous utilisez structure.sql au lieu de schema.rb.RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
Ça peut être:
bundle exec rake db:reset RAILS_ENV=test
la source
rake db:seed
... ce qui peut ou non être un problèmebundle exec rails db:reset RAILS_ENV=test
Parfois, vous devrez peut-être exécuter cette commande (facultatif)
rails db:environment:set RAILS_ENV=test
Mais à coup sûr, effacer votre base de données de test devrait être aussi simple que:
rails db:drop db:create db:migrate RAILS_ENV=test
la source
Vous pouvez ajouter un filtre après en supprimant toutes les entrées des tables concernées.
la source
En théorie, cela
ActiveRecord::Migration.maintain_test_schema!
devrait faire l'affaire. Mettre dansrails_helper.rb
la source
J'ai fini par écrire une simple tâche de rake qui supprime / migre (ou supprime et migre) toutes les bases de données de test et de développement, en fonction de la commande exécutée.
Il inclut une fonctionnalité pour demander à l'utilisateur s'il souhaite continuer lorsqu'une erreur se produit, et utilise la méthode popen3 d'Open3 (de sorte que nous puissions accéder à stdin, stdout et stderr; et toute commande échouée n'entraîne pas le processus de la tâche rake. abandon (contrairement à l'utilisation du système )).
Espérons que cela aide quelqu'un. :)
https://github.com/xtrasimplicity/rake_all_db_helper/
edit: Cela devra être exécuté manuellement à partir de votre shell, chaque fois que vous souhaitez effacer votre base de données, cependant.
la source