2013-12-14 6 views
20
describe('some test', function(){ 
    // Could put here a shared variable 
    it('should pass a value', function(done){ 
     done(null, 1); 
    }); 
    it('and then double it', function(value, done){ 
     console.log(value * 2); 
     done(); 
    }); 
}); 

उपरोक्त वर्तमान में मोचा में काम नहीं करेगा।मोचा पास वैरिएबल अगले टेस्ट

एक समाधान के रूप में ऊपर दिखाए गए परीक्षणों के बीच एक चर साझा किया जाना होगा।

async.waterfall() के साथ यह बहुत संभव है और मुझे वाकई यह पसंद है। क्या मोचा में ऐसा करने का कोई तरीका है?

धन्यवाद!

उत्तर

40

परीक्षणों को अलग रखना बहुत बेहतर है ताकि एक परीक्षण दूसरे में किए गए गणना पर निर्भर न हो। के परीक्षण है कि एक मूल्य के परीक्षण एक पास करना चाहिए और परीक्षण है कि यह बी कुछ सवाल का परीक्षण मिलना चाहिए पर विचार करने के कहते हैं:

  1. परीक्षण एक और परीक्षण बी वास्तव में दो अलग-अलग परीक्षण कर रहे हैं? यदि नहीं, तो उन्हें जोड़ा जा सकता है।

  2. क्या परीक्षण ए परीक्षण के लिए परीक्षण करने के लिए परीक्षण बी प्रदान करने के लिए है? यदि ऐसा है, तो परीक्षण ए before या beforeEach कॉल के लिए कॉलबैक बनना चाहिए। आप मूल रूप से describe को बंद करने में चर को असाइन करके डेटा को पास करते हैं।

    describe('some test', function(){ 
        var fixture; 
    
        before(function(done){ 
         fixture = ...; 
         done(); 
        }); 
    
        it('do something', function(done){ 
         fixture.blah(...); 
         done(); 
        }); 
    }); 
    

मैं मोचा के कोड पढ़ा है, और मैं कुछ भूल नहीं कर रहा हूँ प्रदान की है, कोई रास्ता नहीं describe, it, या done कॉलबैक कॉल करने के लिए मूल्यों के आसपास पारित करने के लिए है। तो ऊपर की विधि यह है।

+0

यह (, समारोह 'कुछ करना' (मूल्य, किया से) {... "मूल्य" पैरामीटर छोड़ दिया जाना चाहिए रख दिया जाता है , यह नहीं होना चाहिए? – onetom

+0

@onetom हाँ! बग को इंगित करने के लिए धन्यवाद। – Louis

+1

घोंसला वाले वर्णनों के बारे में क्या? मुझे पहले() विधि में एक टोकन एक्सेस प्राप्त होता है जो लगभग हर बाद के परीक्षण का उपयोग करने की आवश्यकता होती है। – metaColin

6

लुई ने जो कहा उससे बहुत अधिक सहमत हैं, और यही वजह है कि मोचा वास्तव में इसका समर्थन नहीं करता है। आपके द्वारा संदर्भित एसिंक विधि के बारे में सोचें; यदि आपका पहला परीक्षण विफल रहता है तो आपको बाकी हिस्सों में झरना विफलता मिलती है।

आपका केवल इसके बारे में जाने का रास्ता है, जैसा कि आप शीर्ष पर एक चर रहना कहते हैं,:

describe('some test', function(){ 
    var value = 0; 
    it('should pass a value', function(done){ 
     value = 5; 
     done(); 
    }); 
    it('and then double it', function(done){ 
     console.log(value * 2); // 10 
     done(); 
    }); 
}); 
+0

हाय, एक छोटा फिक्स आपका कथन (async के दस्तावेज़ों को उद्धृत करना): 'यदि कोई भी फ़ंक्शन कॉलबैक में कोई त्रुटि पास करता है, तो अगला फ़ंक्शन निष्पादित नहीं होता है और मुख्य कॉलबैक को तुरंत त्रुटि के साथ बुलाया जाता है ... लेकिन धन्यवाद – Poni

+0

हाँ, लेकिन उस विधि के साथ समस्या यह है कि आप पहले परीक्षण में विफल होने और अगले चरण में जारी रखने के बजाय, निम्नलिखित परीक्षणों का निष्पादन रद्द कर दें - क्या इसका कोई मतलब है? – whitfin

+0

यह अच्छा लग रहा है, दुख की बात है कि मैं इसे काम नहीं कर सकता। ओ.ओ – Antoine

2

यह भी सूट या संदर्भ वस्तु को जोड़ने के लिए संभव है।

इस उदाहरण में, यह सूट वस्तु

describe('suit', function(){ 
    before(() => { 
     this.suitData = 'suit'; 
    }); 

    beforeEach(() => { 
     this.testData = 'test'; 
    }); 


    it('test', done => { 
     console.log(this.suitData)// => suit 
     console.log(this.testData)// => test 
    }) 
}); 
+0

ध्यान रखें कि 'यह' यहां एक अलग 'यह' है यदि आप तीर कार्यों का उपयोग नहीं कर रहे थे ... मुझे लगता है। (कम से कम, मेरे मामले में, जो मैं करने की कोशिश कर रहा था वह काम नहीं कर रहा था, जब तक मुझे एहसास हुआ कि मैं तीर और सामान्य कार्यों को मिश्रित कर रहा था।) मोचा तीर कार्यों का उपयोग नहीं करने की सिफारिश करता है: https://mochajs.org/#arrow- कार्यों –

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