2014-07-03 6 views
9

मोचा, चाई, सीनॉन, प्रॉक्सीक्वायर और नॉक का उपयोग कर रहा हूं।मोचा और नॉक का उपयोग करके एक ही यूआरएल को कैसे रेट किया जाए?

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

उदाहरण के लिए, कोई व्यापारी फ़ीड, 1 व्यापारी फ़ीड, और फिर भी 2 व्यापारी फ़ीड के साथ प्रतिक्रिया।

मौजूदा कोड सभी काम करता है, इसके अलावा यदि मैं व्यक्तिगत रूप से परीक्षण चलाता हूं तो वे पास होते हैं।

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

उपरोक्त परिदृश्य, एक प्रतिक्रिया 1 व्यापारी का एक डिब्बा बंद जबाब साथ तैयार में हो रही सेटअप द्वारा ओवरराइट कहना है 2 व्यापारियों आदि

साथ प्रतिक्रिया करने के लिए वहाँ एक तंत्र हो रहा से बचने के लिए है, उदाहरण के चारों ओर की गारंटी देता है के लिए एसिंक मोचा टेस्टकेस का सीरियल निष्पादन (जो मुझे विश्वास था कि डिफ़ॉल्ट व्यवहार था)।

उत्तर

7

ठीक है, तो यह काम करता है (नमूना कोड):

beforeEach(function (done) { 
      nock(apiUrl) 
       .get('/dfm/api/v1/feeds?all=false') 
       .reply(200, [ 
        {'merchantId': 2, 'id': 2, 'disabled': false} 
       ], { server: 'Apache-Coyote/1.1', 
        'set-cookie': [ 'JSESSIONID=513B77F04A3A3FCA7B0AE1E99B57F237; Path=/dfm/; HttpOnly' ], 
        'content-type': 'application/json;charset=UTF-8', 
        'transfer-encoding': 'chunked', 
        date: 'Thu, 03 Jul 2014 08:46:53 GMT' }); 

      batchProcess = proxyquire('./batchProcess', { 
       './errorHandler': errorHandler.stub, 
       './batchTask': batchTask.stub 
      }); 

      winston.info('single valid feed beforeEach completed'); 
      done(); 
    }); 

उलझी कारकों के बहुत सारे थे। दो चीजों के बारे में पता होना चाहिए:

1)। मेरे पास async testcases था लेकिन किए गए param के बिना पहले() का उपयोग कर रहा था। यह तब यूआरएल टकराव का कारण बन रहा था। प्रत्येक से पहले (किए गए) और आविष्कार किए जाने से प्रत्येक को स्पष्ट रूप से घोषित करके() मोचा धारावाहिक क्रम में चलाएगा और अब कोई मुद्दा नहीं है।

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

2 दिनों बाद अपडेट करें ... ठीक बिंदु 2)। बस मुझे थोड़ा सा, और मुझे प्रसन्नता हुई कि मैंने उपरोक्त नोट लिखा था ताकि इस मुद्दे को डीबग करने के लिए खुद को याद दिलाना पड़े। यदि आप मोचा और नॉक का उपयोग कर रहे हैं तो इस मुद्दे से अवगत रहें !!

अंत में भी एक काटने का निशान सहायक समारोह को लागू किया था, (यहाँ coffeescript) इस के साथ सहायता के लिए: beforeEach के शुरू में फिर

global.resetNock = -> 
    global.nock.cleanAll() 
    global.nock.disableNetConnect() 

सिर्फ अपनी बात से 2 resetNock()

+0

हैलो @arcseldon बधाई देता है कि आपको इस बालों वाली समस्या का जवाब मिल गया है। मैं एक ही स्थिति में हूं https://stackoverflow.com/questions/46801001/nock-not-working-for- बहु- tests- आश्चर्यजनक- और यदि संभव हो तो आपकी सहायता से प्यार होगा। – Rash

8

लागू जवाब में

https://github.com/pgte/nock#cleanall

आप इस डाल सकते हैं:), तुम सब तैयार nocks सफाई करने के लिए उपयोग कर सकते हैं nock.cleanAll()afterEach ब्लॉक में यह सुनिश्चित करने के लिए कि आपके पास परीक्षणों के बीच बचे हुए नॉक्स नहीं हैं।

afterEach -> 
    nock.cleanAll() 
+0

धन्यवाद जेम्स, पहले से ही ऐसा कर रहा हूं, कृपया अद्यतन उत्तर देखें। – arcseldon

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

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