فهم المواصفات والتجهيزات

لدي إضافة (plugin) تحتاج إلى تهيئة بعض المجموعات.

بناءً على https://meta.discourse.org/t/how-to-add-new-webhooks-and-customize-webhook-payload/59609، أضفت في ملف plugin.rb السطر التالي:

  SeedFu.fixture_paths << Rails.root.join("plugins", "discourse-pfaffmanager", "db", "fixtures").to_s

في ملف db/fixtures/001_create_pfaffmanager_groups لدي كود مثل هذا:

Group.seed do |g|
  g.name = SiteSetting.pfaffmanager_ec2_pro_server_group
  g.visibility_level = Group.visibility_levels[:owners]
end

عند تشغيل الأمر ./bin/rake db:migrate يعمل كما أتوقع، لكن عند تشغيل الاختبارات (specs) أحصل على الخطأ التالي:

#   ERROR:  duplicate key value violates unique constraint "index_groups_on_name"

يبدو أن الاختبارات تحاول تشغيل هذه التهيئة مرة أخرى؟ هذا غير منطقي، لأنه إذا أعيدت تشغيل الهجرة (migration) لا تظهر أخطاء.

ربما يجب نقل هذه الاختبارات إلى spec/fixtures وجعل الإضافة تنشئ هذه المجموعات عند بدء التشغيل؟ هل هذا هو أفضل ممارسة؟ أعتقد أنني أفضل فكرة إنشاء المجموعات أثناء الهجرة بدلاً من التحقق منها باستخدام Group.find_or_create_by في كل مرة تبدأ فيها الإضافة، لكن هذا الحل يعمل.

أيضًا، يبدو أن الأمر ./bin/rake db:drop db:create db:migrate ينشئ قاعدة بيانات الاختبار، لكنه لا ينفذ الهجرات ما لم أقوم بتشغيل RAILS_DB=test ./bin/rake db:migrate. هل هذا متوقع؟ كنت أظن أنه سيقوم بتنفيذ الهجرات تلقائيًا.

الآن أنا أكثر حيرة؛ حتى بعد تنفيذ الهجرة المذكورة أعلاه لقاعدة بيانات الاختبار، أحصل على الخطأ التالي:

ActiveRecord::StatementInvalid:
  PG::UndefinedTable: ERROR:  relation "groups" does not exist
  LINE 8:  WHERE a.attrelid = '"groups"'::regclass

وأرى أمورًا مثل هذا في سجلات تشغيل الهجرة:

-- execute("UPDATE groups\nSET flair_icon = 'fab-youtube'\nWHERE flair_icon = 'youtube-play' OR flair_icon = 'fa-youtube-play'\n")

لقد قمت بتشغيل الأمر:

./bin/rake db:test:prepare

وهذا حل المشكلة، لكنني لا أتذكر أنني كنت بحاجة إلى فعل ذلك من قبل.

إعجابَين (2)