Migración automática del esquema de base de datos de prueba

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

No estoy seguro de si hemos explorado esto antes, pero Rails puede mantener automáticamente el esquema de la base de datos de prueba con ActiveRecord::Migration.maintain_test_schema! (definición del método, en rails/test_help, en el generador de helpers más reciente de rspec/rails)

Aquí hay un diff para incorporarlo en spec/rails_helper de Discourse:

Sin embargo, falla en mi entorno de desarrollo basado en Docker:

ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  debe ser el propietario de la base de datos discourse_test

Esto se debe a que maintain_test_schema! utiliza db:test:prepare e intenta eliminar primero la base de datos de prueba, a la cual (creo) el usuario discourse en un entorno basado en Docker no tiene acceso.

¿Podría alguien con un entorno de desarrollo nativo probarlo? Si funciona, ¿quizás valga la pena considerar el cambio?

8 Me gusta

Aplicé ese diff, eliminé mis bases de datos y luego ejecuté
bin/rails db:create
bin/rails db:migrate

luego elegí una especificación al azar

▶ bundle exec rspec spec/requests/permalinks_controller_spec.rb 
Se produjo un error al cargar ./spec/requests/permalinks_controller_spec.rb.
Failure/Error: Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: ERROR:  la relación "groups" no existe
  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)>'
# ------------------
# --- Causado por: ---
# PG::UndefinedTable:
#   ERROR:  la relación "groups" no existe
#   LINE 8:  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   ./app/models/group.rb:532:in `lookup_group'
No se encontraron ejemplos.


Finalizado en 0.00003 segundos (los archivos tardaron 1.6 segundos en cargarse)
0 ejemplos, 0 fallos, 1 error ocurrido fuera de los ejemplos

Nunca entré en config.before('suite')

3 Me gusta