जावास्क्रिप्ट में क्या परीक्षण किया जाना चाहिए?


12

काम पर, हम अभी एक भारी जावास्क्रिप्ट आधारित अनुप्रयोग (वास्तव में कॉफ़ीस्क्रिप्ट का उपयोग करके, लेकिन अभी भी) पर शुरू कर चुके हैं, जिनमें से मैं JsTestDriver और फैब्रिक का उपयोग करके एक स्वचालित परीक्षण प्रणाली लागू कर रहा हूं।

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

मुझे नहीं लगता कि हमें यूनिट टेस्ट के रूप में पेज स्तर के जावास्क्रिप्ट का परीक्षण करना चाहिए, लेकिन इसके बजाय सेलेनियम जैसी प्रणाली का उपयोग करके सब कुछ अपेक्षा के अनुसार काम करता है। इसके लिए मेरा मुख्य तर्क यह है कि फिलहाल, JSTestDriver के माध्यम से पृष्ठ स्तर जावास्क्रिप्ट परीक्षण विफल होने की गारंटी है, क्योंकि वे DOM पर उन तत्वों को एक्सेस करने की कोशिश कर रहे हैं जो संभवतः मौजूद नहीं हो सकते।

तो, जावास्क्रिप्ट में यूनिट का परीक्षण क्या होना चाहिए?


3
आप किसी भी जावास्क्रिप्ट कोड को अलग कर लेते हैं जिसे आपने मॉड्यूल में लिखा है। फिर आप बस उन मॉड्यूल के इनपुट और आउटपुट का परीक्षण करते हैं। कोई भी मॉड्यूल जो DOM से निपटता है इसका मतलब है कि आपको DOM का परीक्षण करना है। एक बेहतर टूल का उपयोग करें फिर jsTestDriver।
रायनोस

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

1
@NathanHoad आप इकाई परीक्षण लिखते हैं जो ब्राउज़र में ही चलाए जाते हैं, नोडुनिट, क्यूनिट और चमेली संवेदी उपकरण हैं। ब्राउज़र में चलने पर आपके पास DOM है। आप ब्राउज़र परीक्षण को स्वचालित करने के लिए टेस्टिंग जैसे टूल का उपयोग कर सकते हैं।
रेयानोस

1
धन्यवाद। मैं jsTestDriver की ओर देख रहा था क्योंकि यह दावा किया गया था कि यह ब्राउज़र में चलने में सक्षम है, जो कि तकनीकी रूप से सच है, मैंने पाया है कि क्वनेट के साथ चलने के समान नहीं है। मैं इस समय अपने स्वयं के टूल पर काम कर रहा हूं, जो एक कस्टम Django डीबग टूलबार पैनल के साथ, Qunit का उपयोग करता है। सेलेनियम के उपयोग से मैं असफल परीक्षणों का पता लगा सकूंगा। इसके अलावा, मुझे संदेह है कि मेरे बॉस परीक्षण के लिए भुगतान करेंगे, हालांकि यह बहुत अच्छा लगता है!
नाथन होद

जवाबों:


4

आप कर सकते हैं सब कुछ का परीक्षण करें।

शुद्ध तर्क को आसानी से परखा जा सकता है।

यदि आपका कोड DOM या नेटवर्क के साथ इंटरैक्ट करता है, तो यह बहुत कठिन है।

यदि आप एक विशिष्ट के बजाय एक मनमाना DOM तत्व पर काम करने के लिए कोड के एक टुकड़े को सार कर सकते हैं, तो आप इसे और अधिक आसानी से परीक्षण कर सकते हैं। (एक पैरामीटर पर काम करने के लिए तत्व बनाएं)।

अजाक्स का उपयोग करने वाले कोड को निश्चित डेटा के साथ कॉलबैक फ़ंक्शन को कॉल करके परीक्षण किया जा सकता है। मेरे पास कुछ परीक्षण हैं जहां मैंने $.ajaxअपने स्वयं के फ़ंक्शन के साथ ओवरवोट किया। बस यह सुनिश्चित करें कि जब आप कर रहे हों तब आप असली को वापस रख दें!

आप क्या पाएंगे कि "पृष्ठ स्तर जावास्क्रिप्ट" का वास्तव में मतलब है, "कसकर युग्मित कोड," और यदि आप कोड के हिस्सों को डिकूप करते हैं, तो आप उन्हें स्वतंत्र रूप से परीक्षण कर सकते हैं।

(सेलेनियम एक इकाई परीक्षण उपकरण नहीं है। यह उच्च-स्तरीय परिदृश्यों के लिए बहुत अच्छा है, लेकिन आप इसके साथ परीक्षण-ड्राइव नहीं कर सकते, और यह एक अलग वातावरण में काम नहीं करता है।)


चमेली फ़ंक्शन कॉल और प्रतिक्रिया डेटा को मॉक कर सकता है, आप ओवरराइडिंग फ़ंक्शन के बजाय उस पर ध्यान दे सकते हैं।
स्टीव

मुझे स्पष्ट करना चाहिए - हमारे पास प्रत्येक पृष्ठ पर कार्य और ऐसे हैं। मैं उस कोड के परीक्षण के बारे में अधिक बात कर रहा था जो अंदर निष्पादित करता है $(document).ready(...)
नाथन होद

1
यह सब कितना बड़ा मामला ...है। :-) मुझे लगता है कि आपको उस एकल नाम के फ़ंक्शन को प्राप्त करने में सक्षम होना चाहिए जिसे परीक्षण भी किया गया है। फिर आपका अनटाइटेड कोड सिंगल लाइन है। (अब यह एक लक्ष्य है, एक दिया नहीं। व्यवहार में मुझे हमेशा एक से अधिक कोड की एक पंक्ति नहीं मिली है।)
शॉन मैकमिलन

@SeanMcMillan - मुझे एक एप्लिकेशन के कुछ हिस्सों का परीक्षण करना बहुत मुश्किल है जो केवल DOM को प्रभावित करता है, उदाहरण के लिए, एक फ़ंक्शन जो केवल कुछ DOM तत्वों के लिए कई घटनाओं को बांधता है। आप कैसे जाँचेंगे कि उन घटनाओं को ठीक से लिखा गया था? नहीं कुछ यूनिट परीक्षण कर सकते हैं, लेकिन वास्तविक ब्राउज़र क्लिक और जाँच (सेलेनियम या जो कुछ भी)
vsync

@vsync: आप यह परख सकते हैं कि, एक क्लिक हैंडलर किसी दिए गए DOM तत्व से बहुत आसानी से जुड़ा हुआ था। मुझे नहीं लगता कि यह जांचना संभव है कि 'क्लिक' सही हैंडलर है, और आपने इसे सही तत्व से जोड़ दिया है।
शॉन मैकमिलन

5

परीक्षण एल्गोरिदम। जीयूआई-बारीकी से संबंधित भागों को विशिष्ट ब्राउज़र पर अधिक निर्भर किया जाता है ताकि सेलेनियम जैसे बर्तनों का उपयोग करके परीक्षण किया जा सके।

आपके कोड में, निश्चित रूप से कोड के एक पृथक टुकड़े के रूप में एल्गोरिदम होना चाहिए, अगर ऐसा नहीं होता है तो यूनिट परीक्षण लगभग असंभव है।

jquery प्लगइन्स, btw, आसान इकाई-परीक्षण योग्य नहीं हैं।


सभी अच्छे अंक! मैं सहमत हूं कि वे आसानी से इकाई परीक्षण योग्य नहीं हैं, यह इस बात पर निर्भर करता है कि वे कैसे लिखे गए हैं।
नाथन होद

-1

मैं जावा के साथ काम करता था और जो मैं देखता हूं कि यूनिट परीक्षण जावा यूनिट परीक्षण जावास्क्रिप्ट की तुलना में आसान है क्योंकि जावा अधिक कठोर है।

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

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

एक और दिशानिर्देश निरंतर एकीकरण प्रक्रिया के लिए एक ई-मेल भेजने के लिए है जिसमें कहा गया है कि यह एक इकाई परीक्षण में विफल रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.