2014-07-13 16 views
51

मेरे पास before() में कॉलबैक फ़ंक्शन है जो डेटाबेस की सफाई के लिए है। before() में सबकुछ it() से पहले समाप्त होने की गारंटी है?पहले से मोचा में Async फ़ंक्शन() spec() spec से पहले समाप्त हो गया है?

before(function(){ 
    db.collection('user').remove({}, function(res){}); // is it guaranteed to finish before it()? 
}); 

it('test spec', function(done){ 
    // do the test 
}); 

after(function(){ 
}); 
+0

यह काम करना चाहिए। आपको बस यह सुनिश्चित करने की ज़रूरत है कि आप अपने 'पहले से हैंडलर' से एक वादा वापस कर दें। जैसे 'पहले (फ़ंक्शन() {वापसी db.collection ...} ' – broofa

उत्तर

84

नई मोचा संस्करणों के लिए:

अब आप मोचा के लिए एक वादा लौट सकते हैं, और यह आगे बढ़ने से पहले पूरा करने के लिए के लिए मोचा इंतजार करेंगे। उदाहरण के लिए, निम्न परीक्षण पारित करेंगे:

let a = 0; 
before(() => { 
    return new Promise((resolve) => { 
    setTimeout(() => { 
     a = 1; 
     resolve(); 
    }, 200); 
    }); 
}); 
it('a should be set to 1',() => { 
    assert(a === 1); 
}); 

आप पुराने मोचा संस्करणों के लिए प्रलेखन here

पा सकते हैं:

इससे पहले कि आप सब कुछ और कुछ होता है अपने अतुल्यकालिक अनुरोध पूरा किया जाना चाहते हैं , आपको अपने पहले अनुरोध में done पैरामीटर का उपयोग करने की आवश्यकता है, और इसे कॉलबैक में कॉल करें।

मोचा तब तक प्रतीक्षा करेगा जब तक done को निम्नलिखित ब्लॉक को संसाधित करने के लिए बुलाया जाता है।

before(function (done) { 
    db.collection('user').remove({}, function (res) { done(); }); // It is now guaranteed to finish before 'it' starts. 
}) 

it('test spec', function (done) { 
    // execute test 
}); 

after(function() {}); 

आप, हालांकि सावधान रहना चाहिए के रूप में इकाई परीक्षण के लिए डेटाबेस छोटा करते नहीं दृढ़ता से निष्पादन धीमा कर सकता है, के रूप में एक डेटाबेस में अनुरोध बहुत लंबा सरल कोड निष्पादन की तुलना में किया जा सकता है।

अधिक जानकारी के लिए, Mocha documentation देखें।

+0

ध्यान दें कि यदि एसिंक्रोनस ऑपरेशन बहुत लंबा लगता है, तो आपको एक विफलता संदेश मिलेगा जो बहुत उपयोगी नहीं है: https://stackoverflow.com/a/ 48087201/1827734 – BrDaHa

+0

मोचा अब हुक में वादे का समर्थन करता है - https://mochajs.org/#working-with-promises। 'किए गए' का उपयोग करने की कोई आवश्यकता नहीं है। बस एक वादा वापस करें। – broofa

+0

धन्यवाद @ ब्रूफा, मैंने जवाब अपडेट किया। –

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