angularjs - Why are my karma unit tests failing with "Unexpected request"? -
मेरा यूनिट परीक्षण सभी इसके साथ असफल रहे हैं:
त्रुटि: अनपेक्षित अनुरोध: दृश्य प्राप्त करें / partials / listings.html`।
मैं इस SO प्रश्न के माध्यम से पढ़ रहा हूं :, लेकिन ऐसा प्रतीत होता है कि चर्चा इस समस्या को हल करती है जब बजाय का उपयोग करते हुए। मैंने स्वीकार किए गए उत्तर में उल्लिखित .passThrough ()
विधि का उपयोग करने की कोशिश की है, लेकिन मुझे यह त्रुटि मिलती है:
typeError: '$ httpBackend.whenGET ('विचार / आंशिक / सूची.html')। PassThrough 'एक फ़ंक्शन नहीं है'
ऐसा प्रतीत होता है कि passThrough ()
विधि केवल पर उपलब्ध है ngMockE2E $ httpBackend
।
मैंने AngularJS ट्यूटोरियल से नकल करने के लिए अपना परीक्षण लिखा था। यह वह परीक्षा है जिस पर मैं काम कर रहा हूं:
(फ़ंक्शन () {'सख्त का उपयोग करें'; का वर्णन करें ('नियंत्रक: सूचीएं', फ़ंक्शन) (var $ httpBackend, ListingsCtrl, scope ; $ HttpBackend = false; लिस्टिग्स Ctrl = झूठी; गुंजाइश = {}; पहले प्रत्येक (मॉड्यूल ('एप')) पहले (इंजेक्शन (फ़ंक्शन (_ $ httpBackend_, $ नियंत्रक, $ रूटस्स्कोप) {$ httpBackend = _ $ httpBackend_; scope = $ RootScope। $ New (); लिस्टिंग्स Ctrl + $ नियंत्रक ('लिस्टिक्ससीटी', {$ स्कोप: स्कोप}); $ httpBackend.expectGET ('/ api / लिस्टिंग / सक्रिय')। ([[पता: [123] सेंट '}, {पता:' 456 अन्य एवेन्यू}}) के बाद; प्रत्येक (कार्य () ($ httpBackend.verifyNoOutstandingExpectation (); $ httpBackend.verifyNoOutstandingRequest ();}); ('सही होना चाहिए डिफ़ॉल्ट खोज मापदंडों ', फ़ंक्शन () {$ httpBackend.flush (); उम्मीद (स्कोप.एडेड)। टीबीई (' कोई '); अपेक्षा (स्कोप। मैक्स्रेंट)। टीबी (' नहीं ne '); उम्मीद (scope.search.address) .toBe ( ''); उम्मीद (scope.search.side) .toBe ( ''); }); यह ('एपीआई से उन्हें लोड करने के बाद लिस्टिंग होनी चाहिए', फ़ंक्शन () (उम्मीद है कि (scope.listings.length)। टीबीई (0); $ httpBackend.flush (); उम्मीद है (scope.listings.length) .toBeGreaterThan 0);}); }); ।}) कॉल (this);
दोनों परीक्षण जो कि मैं एक ही त्रुटि संदेश के साथ परीक्षण (ओपेरा, सफारी, फ़ायरफ़ॉक्स और क्रोम) के सभी चार ब्राउज़रों में विफल रहता है।
मैं छाप के नीचे था कि कर्म
के साथ इकाई जांच केवल नियंत्रक कोड को लोड करती है, और इसलिए किसी भी विचार या टेम्पलेट लोड करने का प्रयास नहीं करेगा ठीक है, मुझे लगता है कि यहां बहुत भ्रम है, मुझे इसे सुलझाने दो। तकनीकी विवरणों में गोताखोरी से पहले, यूनिट परीक्षणों के कुछ वांछनीय गुण हैं:
- हम चाहते हैं कि हमारी यूनिट टेस्ट तेजी से हो तेजी से धधकता। इसका कारण यह है कि हम अक्सर इकाई परीक्षणों को अक्सर चलाने के लिए चाहते हैं, बहुत बार (आप टीडीडी करते हैं, है ना?)।
- यूनिट परीक्षण सेटअप यथासंभव सरल होना चाहिए। इसका कारण यह है कि हम चाहते हैं कि पूरी प्रक्रिया जितनी आसान हो सके। अन्यथा लोग परीक्षण को छोड़ देंगे और हमारे कोड में हम बग नहीं चाहते हैं।
यह मानते हुए कि हम चाहते हैं कि हमारे परीक्षण तेजी से चलने के लिए आसान हो जाएं, आपको नहीं < / Em> टेम्पलेट्स के साथ निर्देशों का परीक्षण करते समय एचटीटीपी के माध्यम से टेम्पलेट्स की सेवा करना। ऐसा करने से समग्र सेटअप अधिक जटिल हो जाएगा (आपको टेम्पलेट्स की सेवा करने के लिए एक WWW सर्वर सेटअप करने की आवश्यकता है, पथ "दाएं" आदि प्राप्त करें) और परीक्षणों को धीमा कर देगा (अतिरिक्त, async HTTP अनुरोध + परीक्षण चालू करते समय नेटवर्क ट्रैफिक)। / P> आप के बजाय क्या करना चाहिए प्रीलोड निर्देशों का टेम्पलेट्स में है ऐसा करने का सबसे आसान तरीका यह है कि यह प्री-प्रोसेसर एचटीएमएल फ़ाइलों को प्राप्त कर सकता है, उन्हें जेएस के रूप में वर्गीकृत करता है और संक्षेप में: अपने परीक्षण सेटअप में यूनिट-परीक्षण और ई 2 ए मॉक्स मिश्रण नहीं करें इससे इसे चलाने के लिए और अधिक जटिल और धीमी पड़ता है। $ templateCache
में डाल देता है। यदि आप इस दृष्टिकोण के साथ पूर्ण प्रोजेक्ट सेटअप की तलाश कर रहे हैं, तो आप यहां एक उत्कृष्ट उदाहरण पा सकते हैं: $ http
पूरी तरह से किसी भी इंटरैक्शन से बचने के बजाय $ templateCache
में प्रीलोड डायरेक्टिव टेम्प्लेट।
Comments
Post a Comment