Migrazione automatica automatica dello schema del database di test

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

Non sono sicuro se abbiamo già esplorato questa possibilità, ma Rails può mantenere automaticamente lo schema del database di test con ActiveRecord::Migration.maintain_test_schema! (definizione del metodo, in rails/test_help, nell’ultimo generatore di helper di rspec/rails)

Ecco una diff per integrarla nel spec/rails_helper di Discourse:

Tuttavia, fallisce sul mio ambiente di sviluppo basato su Docker:

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

Questo perché maintain_test_schema! utilizza db:test:prepare e tenta di eliminare prima il database di test, al quale (credo) l’utente discourse nell’ambiente basato su Docker non ha accesso.

Qualcuno con un ambiente di sviluppo nativo potrebbe provarlo? Se funziona, forse vale la pena prendere in considerazione la modifica?

Ho applicato quella diff, ho eliminato i database e poi ho eseguito
bin/rails db:create
bin/rails db:migrate

poi ho scelto uno spec a caso

▶ bundle exec rspec spec/requests/permalinks_controller_spec.rb 
Si è verificato un errore durante il caricamento di ./spec/requests/permalinks_controller_spec.rb.
Failure/Error: Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: ERRORE: la relazione "groups" non esiste
  LINE 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)>'
# ------------------
# --- Causato da: ---
# PG::UndefinedTable:
#   ERRORE: la relazione "groups" non esiste
#   LINE 8:  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   ./app/models/group.rb:532:in `lookup_group'
Nessun esempio trovato.


Completato in 0,00003 secondi (i file hanno impiegato 1,6 secondi a caricarsi)
0 esempi, 0 fallimenti, 1 errore verificatosi al di fuori degli esempi

Non sono mai entrato in config.before('suite')