ترحيل مخطط قاعدة بيانات الاختبار تلقائيًا

ذو صلة: 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)

إليك فرق (diff) لدمج ذلك في spec/rails_helper الخاص بـ Discourse:

ومع ذلك، يفشل ذلك في إعداد التطوير القائم على Docker الخاص بي:

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

ويرجع ذلك إلى أن maintain_test_schema! تستخدم db:test:prepare، وتحاول إسقاط قاعدة بيانات الاختبار أولاً، والتي (أعتقد) أن مستخدم discourse في الإعداد القائم على Docker لا يملك صلاحية الوصول إليها.

هل يمكن لشخص بإعداد تطوير أصلي تجربتها؟ إذا نجحت، فربما يستحق التغيير النظر فيه؟

طبّقت هذا الاختلاف وحذفت قواعد البيانات، ثم شغّلت
bin/rails db:create
bin/rails db:migrate

بعدها اخترت اختبارًا عشوائيًا

▶ bundle exec rspec spec/requests/permalinks_controller_spec.rb 
حدث خطأ أثناء تحميل ./spec/requests/permalinks_controller_spec.rb.
خطأ في التوقع: Group.find_by(id: id)

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: خطأ: العلاقة "groups" غير موجودة
  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)>'
# ------------------
# --- السبب: ---
# PG::UndefinedTable:
#   خطأ: العلاقة "groups" غير موجودة
#   LINE 8:  WHERE a.attrelid = '"groups"'::regclass
#                               ^
#   ./app/models/group.rb:532:in `lookup_group'
لم يتم العثور على أي أمثلة.


انتهى في 0.00003 ثانية (استغرق تحميل الملفات 1.6 ثانية)
0 أمثلة، 0 فشل، حدث خطأ واحد خارج الأمثلة

لم أدخل أبدًا إلى config.before('suite').