Angular.js: تفشل اختبارات الوحدة عند تشغيلها في أستراليا

تم إنشاؤها على ١٩ نوفمبر ٢٠١٣  ·  14تعليقات  ·  مصدر: angular/angular.js

أتلقى نفس الخطأ المبلغ عنه في هذا التعليق: https://github.com/angular/angular.js/pull/3474#issuecomment -23241136

أنا أيضًا في أستراليا / سيدني.

لقد تمكنت من التخطي --force ، لكن سيكون من الجيد الحصول على فاتورة صحية نظيفة للمساهمة!

Chrome 31.0.1650 (Mac OS X 10.9.0) ngMock TzDate should fake getHours method FAILED
    Expected 4 to be 3.
    Error: Expected 4 to be 3.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:60:29)
    Expected 1 to be 0.
    Error: Expected 1 to be 0.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:64:29)
    Expected 22 to match 21.
    Error: Expected 22 to match 21.
        at null.<anonymous> (/Users/brett/scm/github/angular.js/test/ngMock/angular-mocksSpec.js:68:29)
ngMock moderate investigation broken expected use bug

التعليق الأكثر فائدة

أحصل على Stacktrace مماثل عندما أجري الاختبارات في أستراليا:

(92:86:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ    
(92:46:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ    
(92:06:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ    
pǝlıɐɟ poɥʇǝɯ sɹnoɥʇǝƃ ǝʞɐɟ plnoɥs ǝʇɐpzʇ ʞɔoɯƃu (0˙9˙01 x so ɔɐɯ) 0561˙0˙13 ǝɯoɹɥɔ

(بكل جدية ، قمت بتعيين المشكلة لنفسي وسألقي نظرة عليها)

ال 14 كومينتر

ربما يجب أن نضيف معلومات تحديد الموقع الجغرافي لسحب الطلبات؟

أحصل على Stacktrace مماثل عندما أجري الاختبارات في أستراليا:

(92:86:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙12 ɥɔʇɐɯ oʇ 22 pǝʇɔǝdxǝ    
(92:46:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙0 ǝq oʇ 1 pǝʇɔǝdxǝ    
(92:06:sɾ˙ɔǝdssʞɔoɯ-ɹɐlnƃuɐ/ʞɔoɯƃu/ʇsǝʇ/sɾ˙ɹɐlnƃuɐ/qnɥʇıƃ/ɯɔs/ʇʇǝɹq/sɹǝsn/) <snoɯʎuouɐ>˙llnu ʇɐ        
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ :ɹoɹɹǝ    
˙3 ǝq oʇ 4 pǝʇɔǝdxǝ    
pǝlıɐɟ poɥʇǝɯ sɹnoɥʇǝƃ ǝʞɐɟ plnoɥs ǝʇɐpzʇ ʞɔoɯƃu (0˙9˙01 x so ɔɐɯ) 0561˙0˙13 ǝɯoɹɥɔ

(بكل جدية ، قمت بتعيين المشكلة لنفسي وسألقي نظرة عليها)

أنا على استعداد للتعامل مع هذا شخصيًا إذا كان من الممكن دفع نفقات رحلة إلى أستراليا بالنسبة لي :)

نفس المشكلة في نيوزيلندا.

لا أفهم تمامًا لماذا هذا هو الحال. تم تصميم نموذج TzDate خصيصًا ليكون حياديًا للمنطقة الزمنية.

نحسب الإزاحة بناءً على إعداداتك المحلية ثم نضبط التاريخ ليكون هو نفسه في جميع المناطق الزمنية. انظر: https://github.com/angular.js/blob/547871e779f7a1e340c03296405735415764a0e8/src/ngMock/angular-mocks.js#L647 -L649

لا أفهم لماذا يعمل هذا بشكل جيد في جميع المناطق الزمنية باستثناء أستراليا ونيوزيلندا. أيه أفكار؟

تضمين التغريدة بالنظر إلى الإيقاف بواحد ، يبدو أن هذا مجرد مشكلة في التوقيت الصيفي (تجتاز الاختبارات إذا كنت سأنتقل إلى بريسبان حيث لا يمارسون التوقيت الصيفي). شكرا للمؤشر ، كان هذا دليل مفيد. سأضع طلب سحب.

في الواقع ، عند إجراء مزيد من التحقيقات ، لا يبدو هذا خطأ في اختبارات الزوايا - ربما يكون مشكلة محلية. بدأ التوقيت الصيفي في أستراليا عام 1971 ، لذا كانت حقبة UNIX الساعة 10:00 UTC + 10 ، 1/1/70.

ومع ذلك ، في الاختبارات التي تستخدم إزاحة سالبة لأن هذه الاختبارات تعطي منطقة زمنية مثل +11 بدلاً من +10. يمكن ملاحظة ذلك في العقدة أيضًا:

$ node
> new Date(0)
Thu Jan 01 1970 10:00:00 GMT+1000 (EST)
> new Date(-36000000)
Thu Jan 01 1970 01:00:00 GMT+1100 (EST)
> new Date(1970, 0, 1)
Thu Jan 01 1970 00:00:00 GMT+1100 (EST)
> new Date(1970, 0, 1, 1, 0, 0)
Thu Jan 01 1970 01:00:00 GMT+1100 (EST)

يبدو أن النتائج تختلف بشكل كبير في ظل ظروف لا يمكنني التحكم فيها - لقد فهم Safari أنه خطأ حتى بالنسبة للتاريخ الجديد (0) ، وبعض الشروط التي لا يمكنني إعادة إنتاجها تحتوي على بعض علامات تبويب Chrome (ولكن ليست علامات جديدة كما هو الحال في الكرمة) تفعل ذلك بشكل صحيح .

هناك حل بديل: لتغيير الاختبارات لتحويل التواريخ التي لن تصبح سلبية. إنه نوع من الخلل ، لكن لا يبدو أنه يبطل الاختبارات - آمل أن يكون هذا مقبولًا؟

أعتقد أن هذا يرجع إلى ES5 15.9.1.8 (https://es5.github.io/#x15.9.1.8).

"يجب ألا يحاول تطبيق ECMAScript تحديد ما إذا كان الوقت المحدد يخضع للتوقيت الصيفي ، ولكن فقط ما إذا كان التوقيت الصيفي ساري المفعول إذا تم استخدام خوارزمية التوقيت الصيفي الحالية في ذلك الوقت. وهذا يتجنب المضاعفات مثل مع الأخذ في الاعتبار السنوات التي تراعي فيها المنطقة التوقيت الصيفي على مدار السنة.

إذا كانت البيئة المضيفة توفر وظائف لتحديد التوقيت الصيفي ، فإن تطبيق ECMAScript مجاني لتعيين السنة المعنية إلى سنة مكافئة (نفس السنة الكبيسة ونفس يوم أسبوع البدء للسنة) التي توفرها البيئة المضيفة معلومات التوقيت الصيفي. القيد الوحيد هو أن جميع السنوات المكافئة يجب أن تؤدي إلى نفس النتيجة ".

تتعامل محركات JS المختلفة مع التواريخ <1970 بشكل مختلف عندما يتعلق الأمر بتعديل المنطقة الزمنية المحلية. ترسم بعض المحركات <1970 إلى سنوات أكثر حداثة ، وهو ما يفسر سبب رؤيتك للتاريخ تم تطبيق التوقيت الصيفي فيه على الرغم من أن أستراليا لم تلتزم بالتوقيت الصيفي في ذلك الوقت.

انظر: https://bugzilla.mozilla.org/show_bug.cgi؟id=351066#c20 و https://bugzilla.mozilla.org/show_bug.cgi؟id=1029923

+1

لول (آسف)

جئت إلى هنا من HN.YC. هذا مضحك! : د لول

+1 - أفضل تقرير خطأ على الإطلاق!

+1 أستراليا حصلت على حلقة ملخّصة.

يبدو أنها مشكلة في المواصفات ، ومن الواضح أن السؤال هو ، كيف يجب إصلاحها - كما تنص مواصفات ECMAscript اليوم على أنه يجب تطبيق DST على السنوات الماضية ، بينما تتوقع لغات البرمجة الأخرى ، وخاصة المستخدمين ، سلوكًا مختلفًا.

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات