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

لدي مشكلة غريبة مع QUnit.

هذا الاختبار بسيط للغاية ويجب أن يكون مباشرًا … ولكن …

إعداد المكون الإضافي يتغير عن الإعدادات التي قمت بإعدادها.

عندما يتم تشغيل جافا سكريبت نتيجة لتحميل الملحن، فإن قيمة الإعداد التي تم تعيينها سابقًا في كتلة القبول لم تعد كما هي!

يجب أن تكون “user” كما تم تعيينها في كود الاختبار، ولكن إذا تم تسجيلها في وحدة التحكم، فهذا ما أراه، وسبب فشل الاختبار:

هل أفعل شيئًا غبيًا هنا؟ لماذا تتغير قيمة location_topic_default من user إلى none؟

يرجى ملاحظة الإعداد الافتراضي:

نطاق needs.settings صحيح على الأرجح هنا؟

يبدو الأمر كما لو أن needs.settings تعمل بترتيب خاطئ وخارج نطاق acceptance

إعجابَين (2)

لقد قمت بتجربة هذا محليًا. يبدو أن هناك بضعة عوامل تلعب دورًا:

الكائن siteSettings الذي تشير إليه يتم الحصول عليه بواسطة المُهيئ، ثم يتم استخدامه في استدعاء modifyClass:

تتم إعادة تشغيل المُهيئات لكل اختبار. المشكلة هي أنه ليس لدينا طريقة “لإعادة تعيين” أي استدعاءات modifyClass تم إجراؤها بواسطة الاختبارات السابقة. الحل لدينا هو المعلمة pluginId - هذا يعني أنه يتم استخدام استدعاء modifyClass الأول في مجموعة الاختبارات بأكملها فقط. يتم تجاهل استدعاءات modifyClass من المُهيئات في الاختبارات المستقبلية.

عادةً ما يكون هذا جيدًا - فالتعليمات البرمجية داخل استدعاء modifyClass لا تتغير كثيرًا في كل مرة يتم فيها تشغيل الاختبار. ومع ذلك، في هذه الحالة، أنت تشير إلى مرجع siteSettings من نطاق المُهيئات.

الخلاصة هنا: في الاختبارات، يعني هذا التنفيذ أن modifyClass سيظل عالقًا بإعدادات الموقع من أي اختبار كان الأول في التشغيل.

الحل هو استخدام مرجع siteSettings “في وقت التشغيل” بدلاً من “وقت التهيئة”. يمكننا استخدام المرجع من model:composer نفسه. هذا التعديل يجعل الاختبارات تمر بالنسبة لي:

diff --git a/assets/javascripts/discourse/initializers/location-edits.js.es6 b/assets/javascripts/discourse/initializers/location-edits.js.es6
index 19e50c0..9d5f882 100644
--- a/assets/javascripts/discourse/initializers/location-edits.js.es6
+++ b/assets/javascripts/discourse/initializers/location-edits.js.es6
@@ -83,7 +83,7 @@ export default {
         @observes("draftKey")
         _setupDefaultLocation() {
           if (this.draftKey === "new_topic") {
-            const topicDefaultLocation = siteSettings.location_topic_default;
+            const topicDefaultLocation = this.siteSettings.location_topic_default;
             if (
               topicDefaultLocation === "user" &&
               currentUser.custom_fields.geo_location &&
إعجابَين (2)

ديفيد، شكراً جزيلاً! هذا أمر مخادع حقاً!

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

ديفيد،

للعلم

هناك مشكلة أخرى هنا أظن أنها لنفس السبب:

currentUser معرف أيضًا في المُهيئ.

إذا تم تشغيل الاختبار الخاطئ ثانيًا، فسيتم تقييم هذا ولن يكون معرفًا بعد ذلك، لذا قد تفشل الاختبارات عند تشغيلها معًا “نصف” الوقت.

أعتقد أن نموذج Composer يحتوي على user، لذا سأنتقل إليه…

إعجابَين (2)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.