2016-06-07 15 views
8

में बार-बार चलते हैं, इसलिए मुझे इस समस्या का सामना करना पड़ रहा है क्योंकि मैंने नए निर्देश परीक्षणों (एक जेएचप्स्टर परियोजना में) का एक गुच्छा बनाया है। कर्म इकाई परीक्षणों को एक गंभीर कार्य द्वारा निष्पादित किया जाता है।कर्म इकाई परीक्षण एक अनंत लूप

https://github.com/karma-runner/karma/issues/1077

https://github.com/karma-runner/karma/issues/393

अंतर है: मैं स्पष्ट रूप से उजागर करने के लिए है कि मेरी समस्या अलग है से इन दोनों (और कुछ अन्य लोगों मैं पोस्ट करने की अनुमति नहीं कर रहा हूँ) है कि मैं GitHub पर पाया चाहते हैं कि कर्म कभी परीक्षणों को निष्पादित नहीं किया जाता है, लेकिन उन्हें एक लूप में चलाता रहता है जैसे कि कॉन्फ़िगर किए गए स्थान में असीमित परीक्षण होते हैं। यह स्पष्ट रूप से कमांड लाइन उत्पादन पर देखा जा सकता:


Firefox 45.0.0 (Windows 7 0.0.0): Executed 321 of 192 (skipped 7) SUCCESS (0 secs/1 min 3.757 secs) 
Chrome 51.0.2704 (Windows 7 0.0.0): Executed 399 of 192 (skipped 11) SUCCESS (0 secs/1 min 2.239 secs) 
PhantomJS 2.1.1 (Windows 7 0.0.0): Executed 444 of 192 (skipped 11) SUCCESS (0 secs/1 min 0.515 secs) 

और यह हमेशा के लिए चला जाता है। निष्पादन के लगभग एक घंटे बाद, यह परिणाम है:


Chrome 51.0.2704 (Windows 7 0.0.0): Executed 20171 of 192 (skipped 472) SUCCESS (0 secs/50 mins 7.281 secs) 
Firefox 45.0.0 (Windows 7 0.0.0): Executed 3186 of 192 (skipped 72) DISCONNECTED (14 mins 48.503 secs/12 mins 16.547 secs) 
PhantomJS 2.1.1 (Windows 7 0.0.0): Executed 27054 of 192 (skipped 611) DISCONNECTED (48 mins 25.253 secs/47 mins 34.776 secs) 

यह कोई फर्क नहीं पड़ता परीक्षण पास या असफल, या क्यों वे असफल (TypeError, ReferenceError...), परीक्षण हमेशा के लिए परवाह किए बिना चलाने के लिए कि क्या (सभी परीक्षणों यहाँ गुजरती हैं, के रूप में आप कर सकते हैं देख)। निष्पादन केवल तब बंद हो जाता है जब मैं कमांड लाइन में गंदे कार्य को रोकता हूं।

कर्म कॉन्फ़िगरेशन और पिछले कुछ महीनों में कचरा कार्य नहीं बदला है। सिंगलरुन और ऑटोवॉच सेटिंग्स (साथ ही साथ कोई अन्य) अप्रासंगिक हैं।

परीक्षण के तहत कोड अप्रासंगिक प्रतीत होता है। कुछ बदलाव, उन्होंने थोड़ी देर के लिए समस्या दूर कर दी, लेकिन जैसे ही मैं नए परीक्षण लिखता हूं, यह हमेशा वापस आता है। बेशक मैंने पहले सोचा था कि मेरा कोड दोष था, लेकिन अनुवर्ती दिखाएंगे कि यह तार्किक निष्कर्ष क्यों नहीं है।

अजीब व्यवहार हमेशा एक नया परीक्षण बनाते समय शुरू होता है, लेकिन परीक्षण कोड स्वयं अप्रासंगिक प्रतीत होता है, क्योंकि नए परीक्षण कभी भी किसी विशेष ऑपरेशन या कवर घटकों का उपयोग नहीं करते हैं जो अन्य परीक्षण नहीं करते हैं। इसके अलावा, भले ही नया परीक्षण एक पूरी तरह से खाली कार्य निकाय है, फिर भी यह अजीब व्यवहार का परिणाम देता है जो बताता है कि यह कार्यक्रम में एक नया निर्णय पथ नहीं है जो परीक्षण के दौरान समस्या का कारण बनता है। यही कारण है कि मुझे विश्वास नहीं है कि कोड दोष है। मैं यादृच्छिक परीक्षणों को बंद करके अनंत निष्पादन को रोकने में भी कामयाब रहा (जिसे हम बिना किसी समस्या के लंबे समय तक उपयोग करते हैं), लेकिन जब मैंने नए परीक्षण जोड़े तो समस्या हमेशा वापस आई।

पर्यावरण अप्रासंगिक है। टेस्ट सर्वर पर और विंडोज़ पर सीआई में टेस्ट असीमित रूप से चलते हैं।

मैंने यह भी सोचा कि शायद यह एक स्मृति सीमा समस्या है, क्योंकि थोड़ी देर के लिए, ब्राउज़र एक निश्चित परीक्षण में दुर्घटनाग्रस्त हो गया है जिसमें नई सुविधा या नए परीक्षणों के साथ कुछ भी नहीं है (और महीनों के लिए ठीक काम कर रहा है) । जब मैंने उस परीक्षा को बंद कर दिया, तो मुद्दा थोड़ी देर के लिए बंद हो गया लेकिन बाद में वापस आ गया (जैसा कि मैंने परीक्षण लिखने पर रखा था)।

मैंने सभी एनपीएम पैकेज और बॉवर घटकों को नवीनतम संस्करण में अपडेट किया है, लेकिन इसमें अनंत लूपिंग नहीं बदली है।

अब तक मैं पूरी तरह से विचारों से बाहर हूं। क्या किसी ने कभी इस तरह के अजीब व्यवहार और कंसोल आउटपुट का सामना किया?

+0

वही बात आज हमारे साथ हो रही है - मुझे आश्चर्य है कि क्या कर्म/चमेली/कुछ अन्य पर निर्भरता है जो इसका कारण बन सकती है? –

+0

संयोग होना चाहिए कि एक ही समय में हमारे पास एक ही समस्या थी! हमने यह कैसे तय किया है इसके लिए नीचे मेरा उत्तर देखें। –

उत्तर

5

हमने अभी इस सटीक समस्या को ठीक कर दिया है। मुद्दा यह था कि हमारे पास हमारे एप्लिकेशन में लॉगआउट फ़ंक्शन है जो ब्राउज़र से दूसरे पृष्ठ पर रीडायरेक्ट करने से पहले विभिन्न कार्यों को करता है। हमारे लॉगआउट फ़ंक्शन के चारों ओर जोड़े गए हमारे परीक्षणों में से एक विंडो को मजाक नहीं कर रहा था।कॉल रीडायरेक्ट करें, और जब इसे कर्म परीक्षण से निष्पादित किया गया तो यह लूपिंग व्यवहार का कारण बन गया।

इस कॉल को मजाक करने/जासूसी करने के बाद, लूपिंग व्यवहार बंद हो गया।

सुनिश्चित नहीं है कि यह वही समस्या है जो आपके पास है, लेकिन उम्मीद है कि यह जानकारी आपकी मदद करेगी!

+0

धन्यवाद, यह पूरी तरह से मदद की। कोड शांति पर परीक्षणों का एक समूह है जो ब्राउज़र को संसाधन डाउनलोड करता है: '$ window.location =" ... "'। उन कॉलों को जासूसी करने से समस्या हल हो गई। एकमात्र चीज जो मेरे दिमाग को बरकरार रखती है वह यह है कि मैं कुछ बार लूपिंग को रोकने में कामयाब रहा, लेकिन यह वापस आया क्योंकि मैंने नए परीक्षण लिखे थे। क्या आपको लगता है कि पुनर्निर्देशन कुछ स्मृति रिसाव या इसी तरह का कारण बन सकता है, जिससे प्रत्येक परीक्षण में असामान्य स्मृति खपत होती है? यदि ऐसा है, तो मुझे विश्वास है कि रीडायरेक्टिंग का मज़ाक उड़ाते हुए समस्या को स्थायी रूप से हल करता है। अन्यथा मुझे डर है कि लूपिंग फिर से वापस आ जाएगी। – user436357

+0

मुझे लगता है कि यह व्यवहार इसलिए है क्योंकि रीडायरेक्ट को संसाधित करने में कुछ समय लगता है, इसलिए रीडायरेक्ट के बाद निष्पादित किए जाने वाले अधिक परीक्षण, जितना अधिक समय आप रीडायरेक्ट को रीडायरेक्ट पर दे रहे हैं, और फिर लूपिंग शुरू होती है। सिद्धांत रूप में यदि रीडायरेक्ट कर्म पर चलने वाले अंतिम परीक्षण पर हो रहा है तो आपको लूपिंग दिखाई नहीं देगी क्योंकि रीडायरेक्ट होने से पहले कर्म रन समाप्त हो जाएगा। –

+0

पीएस अगर आपको मेरा जवाब पसंद है तो कृपया इसे स्वीकार करें :) –

संबंधित मुद्दे