関連: Db:drop, create & migrate behavior with RAILS_ENV=development - #2 by taylorthurlow - A May Of WTFs - Ruby on Rails Discussions
以前にこの点について検討したかどうかはわかりませんが、Rails は ActiveRecord::Migration.maintain_test_schema! を使用してテストデータベースのスキーマを自動的に維持できます(メソッド定義、rails/test_help 内、最新の rspec/rails ヘルパージェネレーター内)。
Discourse の spec/rails_helper にこれを組み込むための diff は以下の通りです:
ただし、私の Docker ベースの開発環境では失敗します:
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR: must be owner of database discourse_test
これは、maintain_test_schema! が db:test:prepare を利用し、最初にテストデータベースを削除しようとするためです。Docker ベースの環境では、discourse ユーザーにその権限がないと思われます。
ネイティブな開発環境をお持ちの方は、試していただけませんか?もし動作すれば、この変更を検討する価値があるかもしれません。
「いいね!」 8
その差分を適用し、データベースを削除してから
bin/rails db:create
bin/rails db:migrate
を実行しました。
その後、ランダムな仕様の一つを選びました
▶ bundle exec rspec spec/requests/permalinks_controller_spec.rb
./spec/requests/permalinks_controller_spec.rb の読み込み中にエラーが発生しました。
Failure/Error: Group.find_by(id: id)
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "groups" does not exist
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)>'
# ------------------
# --- Caused by: ---
# PG::UndefinedTable:
# ERROR: relation "groups" does not exist
# LINE 8: WHERE a.attrelid = '"groups"'::regclass
# ^
# ./app/models/group.rb:532:in `lookup_group'
サンプルが見つかりませんでした。
完了まで 0.00003 秒(ファイルの読み込みに 1.6 秒要しました)
0 サンプル、0 失敗、サンプル外で 1 件のエラーが発生しました
config.before('suite') には一度も到達しませんでした。
「いいね!」 3