क्या प्रोट्रैक्टर और कर्म एक साथ उपयोग किए जा सकते हैं?


104

यदि प्रोट्रैक्टर ई 2 ई परीक्षण के लिए कोणीय परिदृश्य रनर की जगह ले रहा है, तो क्या इसका मतलब है कि मैं अभी भी कर्मा के साथ अपने ई 2 ई परीक्षण ढांचे के रूप में उपयोग कर पाऊंगा ?


IMO आपको सक्षम होना चाहिए। कर्म सिर्फ परीक्षा धावक है। एक बार जब आप प्रोट्रैक्टर में अपने परीक्षण मामलों को लिखते / बनाते हैं .... तो कर्म को केवल तब ही चलाने में सक्षम होना चाहिए जब पूछा जाए। उसी तरह आप कर्म को वर्तमान ई 2 ई परीक्षण चलाने के लिए कह सकते हैं।
स्कीन

1
@skeep वेबड्राइवर वेबड्राइवर प्रोटोकॉल के माध्यम से ब्राउज़रों से जुड़ता है और जुड़ता है - कुछ ऐसा है जो कर्म का समर्थन नहीं करता है (यह इसके बजाय WebSockets और एक वेब पेज का उपयोग करता है)। वे बहुत अलग तरीकों से समान कार्य करते हैं। अब-वर्धित कर्म E2E परीक्षण WebDriver का उपयोग नहीं करते हैं और इसके लिए पीड़ित होते हैं - उन्हें ब्राउज़र के भीतर राज्य बनाए रखना चाहिए (WebDriver राज्य पूरी तरह से ब्राउज़र प्रक्रिया से बाहर है)।
एंडी

जवाबों:


102

प्रोट्रैक्टर के वर्तमान अनुरक्षक द्वारा अनुशंसित नहीं:

https://github.com/angular/protractor/issues/9#issuecomment-19927049

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

Protractor WebDriverJS के शीर्ष पर बनाया गया है, जो ब्राउज़रों को व्यवस्थित करने और परीक्षण निष्पादन के लिए सेलेनियम / WebDriver सर्वर का उपयोग करता है। शुद्ध WebDriverJS के उदाहरण यहां देखे जा सकते हैं: http://code.google.com/p/selenium/wiki/WebDriverJs

तथा

https://github.com/angular/protractor/issues/9#issuecomment-19931154

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


क्या यह अभी भी सही है कि हमें कर्म से प्रोटेक्टर नहीं चलाना चाहिए?
ErikAGriffin

@theLateWizard पूरी तरह से सच है, न केवल आप नहीं करना चाहिए, आप नहीं कर सकते :)
दिमित्री ज़ैतसेव

74

अपडेट करें। यहाँ एक साधारण पैकेज है जिसे मैंने एक एकल कमांड के साथ किसी भी प्रोजेक्ट में न्यूनतम कर्मा सेटअप जोड़ने के लिए बनाया है npm install min-karma


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


कर्मा

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

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

केवल फाइलों के एक सेट को चलाने के लिए कर्मा की यह विशेषता है कि यह प्रत्येक स्रोत फ़ाइल के संपादन में पृष्ठभूमि में चल रहे तेज परीक्षणों के लिए एकदम सही है, और तत्काल प्रतिक्रिया प्राप्त करें, जो शानदार है! एकमात्र नकारात्मक "शोर" त्रुटि रिपोर्टिंग है जो उम्मीद में सुधार करेगी!


कर्म केवल इकाई परीक्षणों के लिए नहीं है

अध्याय परीक्षा आपके स्रोत कोड की एक इकाई के लिए है। कोणीय के मामले में एक विशिष्ट इकाई कोणीय घटक ( Service, Factory, Provider, Controller, Filter, Directiveआदि) है। अपने Controllersपतले रखने के लिए याद रखें , इसलिए लैटर्स के लिए कई यूनिट परीक्षण एक लाल झंडा है

एक इकाई परीक्षण में , कोड की प्रत्येक अन्य इकाइयाँ, जिन पर यह इकाई निर्भर करती है (तथाकथित इकाई की निर्भरताएँ) एक ही समय में परीक्षण नहीं की जानी चाहिए। इसके बजाय उन्हें "नकली" होना चाहिए, उदाहरण के लिए डमी उदाहरणों की तरह कुछ सरल। कोणीय महान मॉक पर्यावरण समर्थन प्रदान करता है । आदर्श रूप से आप उन सभी मौकों को सीधे अपने परीक्षणों के अंदर देखना चाहते हैं, इसलिए आपको कभी आश्चर्य करने की आवश्यकता नहीं है कि वे सभी निर्भरताएं कहां से आती हैं।

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

तेज और बार-बार चलना कर्म की मुख्य विशेषता है । इसका मतलब है कि आप किसी भी सर्वर अनुरोध, किसी भी डेटाबेस प्रश्नों, ऐसी किसी भी चीज़ से बचना चाहते हैं जो कुछ सेकंड से अधिक समय तक हो सकती है। ( अन्यथा यह तेज़ नहीं होगा! ) वे लंबी प्रक्रियाएँ हैं जिनका आप मखौल बनाना चाहते हैं । इससे यह भी पता चलता है कि कच्ची निम्न स्तर की सेवाओं को $httpसीधे अपने नियंत्रकों या किसी जटिल व्यावसायिक तर्क इकाइयों के अंदर डालने के लिए यह एक बुरा अभ्यास क्यों है । संचार सेवाओं के बाहर उन निम्न स्तर को छोटी समर्पित सेवाओं में लपेटकर , आप "उन्हें दूर करना" आसान बना देते हैं।

क्या कर्म? नहीं करता है अपनी साइट चल रहा है के रूप में यह है जो एंड-टु-एंड (E2E) परीक्षण है,। सिद्धांत रूप में, आप साइट या उसके टुकड़ों को फिर से बनाने के लिए कोणीय के आंतरिक तरीकों का उपयोग कर सकते हैं। जो, छोटे टुकड़ों के लिए, उपयोगी हो सकता है, और निर्देशों का परीक्षण करने के लिए एक तेज़ तरीका।

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

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


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


चांदा

प्रोटेक्टर है:

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

तो प्रोट्रैक्टर ठीक वही करता है जो कर्म करता है नहीं करता है - अपने वास्तविक अंतिम एप्लिकेशन को चलाएं। इससे इसकी शक्ति और सीमाओं दोनों का पता चलता है:

पूरा आवेदन चल रहा है एकमात्र विश्वसनीय अंतिम परीक्षण है जो आपका आवेदन अपेक्षित रूप से काम करता है। आप पूर्ण उपयोगकर्ता कहानी परिदृश्य लिख सकते हैं और उन्हें अपने परीक्षणों में डाल सकते हैं!

लेकिन अपने स्रोत कोड की अलग-अलग इकाइयों को अलग किए बिना त्रुटियों को ट्रैक करना कठिन है । यही कारण है कि आपको अभी भी अपने जावास्क्रिप्ट कोड का परीक्षण करने के लिए कर्म की आवश्यकता है ।


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

एकमात्र अपवाद दोनों धावकों के लिए उपयोगी मैक्रो परीक्षण को परिभाषित करने वाली एक फ़ाइल होगी । यह, हालांकि, एक परीक्षण फ़ाइल नहीं बल्कि मैक्रो परिभाषा फ़ाइल होगी

इसके अलावा, मुझे अपने परीक्षणों के बीच एक स्पष्ट अलगाव पसंद है। जिन्हें बार-बार और तेजी से चलाया जा सकता है, और वे पूरे ऐप के लिए। कर्म का उपयोग करते समय और प्रोट्रैक्टर के बीच स्पष्ट अलगाव होता है ।


अगर मुझे यूनिट टेस्टिंग के साथ-साथ e2e टेस्टिंग चाहिए तो मुझे ui टेस्टिंग या e2e टेस्टिंग के लिए यूनिट टेस्टिंग और प्रोट्रैक्टर के लिए कर्मा एनवायरनमेंट को कॉन्फ़िगर करना होगा?
सुनील गर्ग

@SunilGarg हाँ, यदि दोनों का उपयोग करना चाहते हैं, लेकिन जैसा कि मैंने लिखा है, कर्म केवल इकाई परीक्षण के लिए नहीं है।
दिमित्री ज़ैतसेव

1

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

जैस्मीन एक जावास्क्रिप्ट यूनिट टेस्टिंग फ्रेमवर्क है और हमें हमारे एप्लिकेशन का परीक्षण करने के लिए उपयोगिताओं के साथ प्रदान करेगा। यह कोणीय ढांचे पर सबसे अच्छा काम करता है और इस प्रकार, "स्वचालित इकाई परीक्षण उपकरण" की हमारी पसंद। https://github.com/shahing/testingangularjs

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

https://github.com/shahing/Protractor-Web-Automation


1

हां, आप कर्म और प्रोट्रैक्टर का एक साथ उपयोग कर सकते हैं। कर्म का उपयोग इकाई के परीक्षण के लिए किया जाता है जिसे आपने कोणीय कमांड का उपयोग करके बनाया है आप कर्म का उपयोग करके उन घटकों का परीक्षण कर सकते हैं। प्रोट्रेक्टर का उपयोग अंत से अंत परीक्षण के लिए किया जाता है। यह मुख्य रूप से यूआई परीक्षण के लिए उपयोग किया जाता है।


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