Migration automatique du schéma de la base de données de test

Lié : Db:drop, create & migrate behavior with RAILS_ENV=development - #2 by taylorthurlow - A May Of WTFs - Ruby on Rails Discussions

Je ne suis pas sûr que nous ayons déjà exploré cela, mais Rails peut automatiquement maintenir le schéma de la base de données de test grâce à ActiveRecord::Migration.maintain_test_schema! (définition de la méthode, dans rails/test_help, dans le générateur d’aide rspec/rails le plus récent).

Voici un diff pour l’intégrer dans spec/rails_helper de Discourse :

Cependant, cela échoue sur mon environnement de développement basé sur Docker :

ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  must be owner of database discourse_test

Cela est dû au fait que maintain_test_schema! utilise db:test:prepare et tente de supprimer la base de données de test en premier, ce à quoi (je pense) l’utilisateur discourse sur un environnement basé sur Docker n’a pas accès.

Pourrait quelqu’un avec un environnement de développement natif essayer cela ? Si cela fonctionne, peut-être que ce changement vaut la peine d’être envisagé ?

8 « J'aime »

J’ai appliqué ce diff, supprimé mes bases de données, puis exécuté
bin/rails db:create
bin/rails db:migrate

Ensuite, j’ai choisi une spécification au hasard :

▶ bundle exec rspec spec/requests/permalinks_controller_spec.rb 
Une erreur s'est produite lors du chargement de ./spec/requests/permalinks_controller_spec.rb.
Erreur de fichier : Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: ERREUR : la relation "groups" n'existe pas
  LIGNE 8 :  WHERE a.attrelid = '"groups"'::regclass
                              ^
# ./app/models/group.rb:532:in `lookup_group'
# ./app/models/group.rb:516:in `block in ensure_automatic_groups!'
# ./app/models/group.rb:515:in `each_key'
# ./app/models/group.rb:515:in `ensure_automatic_groups!'
# (eval):3:in `block (2 levels) in run_file'
# ./spec/rails_helper.rb:79:in `<top (required)>'
# ./spec/requests/permalinks_controller_spec.rb:3:in `require'
# ./spec/requests/permalinks_controller_spec.rb:3:in `<top (required)>'
# ------------------
# --- Cause : ---
# PG::UndefinedTable:
#   ERREUR : la relation "groups" n'existe pas
#   LIGNE 8 :  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   ./app/models/group.rb:532:in `lookup_group'
Aucun exemple trouvé.


Terminé en 0,00003 seconde (les fichiers ont mis 1,6 seconde à charger)
0 exemples, 0 échec, 1 erreur survenue en dehors des exemples

Je n’ai jamais atteint config.before('suite').

3 « J'aime »