المصنعون يولدون أسماء مزورة نتيجة لعمر قاعدة بيانات الاختبار المحلية

لقد واجهت للتو مجموعة من الاختبارات الفاشلة بأخطاء مثل هذه:

 ActiveRecord::RecordInvalid:
       فشلت المصادقة: الاسم مأخوذ بالفعل

ويبدو أن هذه هي المشكلة:

  fab!(:the_group) { Fabricate(:group) }

لقد نجحت كل هذه الأمور حتى وقت قريب. رأيت هذا في بعض الإضافات الأخرى التي كنت أعمل عليها، وأعتقد أنني تمكنت من تعيين اسم عشوائي بنفسي، لكن هذه نجحت، على ما أعتقد، حتى يوم أمس.

هل تغير شيء ما، أم أنني فعلت شيئًا غبيًا عن طريق الخطأ؟

تحرير: بمساعدة Claude وروبوت مساعد Discourse، حاولت استبدال fab أعلاه بـ

  Fabricator(:the_group) do
    name { sequence(:group_name) { |i| "Test Group #{i}" } }
  end

لكنني لم أتمكن من معرفة كيفية القيام بذلك تمامًا.

ثم استخدمت

  let(:the_group) { Fabricate(:group) }

بدلاً من !fab أعلاه وهذا قلل عدد حالات الفشل من 12 إلى 1، لكنه لا يزال يفشل مع

  1) Pfaffmanager::ServersController servers admin can get servers owned by a group
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

لا أعتقد أن أي شيء حول هذه الاختبارات قد تغير منذ يوم أمس الساعة 10:30 صباحًا بتوقيت وسط أمريكا عندما قمت بآخر تثبيت.

لقد تراجعت إلى تثبيت سابق والآن يفشل مع


  1) Pfaffmanager::ServersController servers includes groups that the user is in
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

وقد قمت بتشغيله مرة أخرى دون إجراء أي تغييرات والآن يفشل على

  1) Pfaffmanager::ServersController servers can update group id if group owner
     Failure/Error: let(:the_group) { Fabricate(:group) }

     ActiveRecord::RecordInvalid:
       Validation failed: Name has already been taken

لذلك يبدو أنه يفشل في اختبار واحد، وهو عشوائي؟

إعجاب واحد (1)

ربما تكون قاعدة بيانات الاختبار المحلية لديك في حالة سيئة؟ سأحاول تشغيل:

RAILS_ENV=test bin/rake db:drop db:create db:migrate
3 إعجابات

يا إلهي. إذن، كانت بالفعل، مخلوقات شيطانية.

من الغريب أن أول db:create لم ينشئ قاعدة بيانات متعددة المواقع، ولكن عندما قمت بتشغيل مهمة db:create وحدها، فقد فعلت ذلك. ثم نجح الترحيل، ثم عمل كل شيء بشكل صحيح.

وأنتِ يا @Lilly وعيناكِ :eyes: تضحكانني.

أرى، لذا شيء مثل أن قاعدة بيانات الاختبار هذه كانت لدي لفترة طويلة وبدأت الأسماء التي تم إنشاؤها عشوائيًا في التعارض مع الأسماء السابقة. هذا منطقي الآن. لقد قمت بتغيير برنامج الترقية النصي الخاص بي (الذي يقوم بـ git pull، وتحديث التعليمات البرمجية من all-the-plugins، والتحقق من إصدار ruby وما إلى ذلك) لإسقاط، وإنشاء، وترحيل قاعدة بيانات الاختبار.

4 إعجابات

هاها. حسنًا، كنت أتفحص مقتطفات الكود الخاصة بك لأنني كنت متأكدًا من أنها كان يجب أن تعمل لأن:

إعجابَين (2)

من الناحية النظرية، من المفترض أن يتم تنظيف قاعدة بيانات الاختبار تلقائيًا بعد كل تشغيل اختبار. لذلك لا ينبغي أن تصل أبدًا إلى هذه الحالة. ولكن… إذا تم إنهاء عمليات الاختبار بشكل سيء بطريقة ما، أعتقد أنه من الممكن تخطي هذا التنظيف (تقنيًا، استعادة نقطة حفظ pg).

لذلك لا ينبغي أن يكون هذا حدثًا عاديًا. شخصيًا، لن أزعج نفسي بـ drop/create/migrate إلا إذا بدأت في الحصول على فشل غريب.

ولكن، إذا كنت لا تمانع في الانتظار، فلا ضرر من إعادة إنشاء قاعدة بيانات الاختبار الخاصة بك بانتظام :+1:

3 إعجابات

هذا منطقي. أنا أحب ^c.

أنا أكره الانتظار. سأعلقها على أمل أن أتذكر. :slight_smile:

شكرًا مرة أخرى على اكتشاف هذا. كنت متأكدًا من أنني كنت أفقد عقلي.

إعجابَين (2)

تم إغلاق هذا الموضوع تلقائيًا بعد 30 يومًا من آخر رد. لم يعد يُسمح بالردود الجديدة.