मैं एक परीक्षण के मामले में एक नेटवर्क अनुरोध प्रस्तुत कर रहा हूं, लेकिन यह कभी-कभी 2 सेकंड (डिफ़ॉल्ट टाइमआउट) से अधिक समय लेता है।
मैं एकल परीक्षण मामले के लिए समय-सीमा कैसे बढ़ाऊं?
मैं एक परीक्षण के मामले में एक नेटवर्क अनुरोध प्रस्तुत कर रहा हूं, लेकिन यह कभी-कभी 2 सेकंड (डिफ़ॉल्ट टाइमआउट) से अधिक समय लेता है।
मैं एकल परीक्षण मामले के लिए समय-सीमा कैसे बढ़ाऊं?
जवाबों:
यहां आप जाएं: http://mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
तीर फ़ंक्शन उपयोग के लिए निम्नानुसार है:
it('accesses the network', (done) => {
[Put network code here, with done() in the callback]
}).timeout(500);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)
के अंत तकit(...).timeout(500)
यदि आप es6 एरो फ़ंक्शंस का उपयोग करना चाहते हैं, तो आप .timeout(ms)
अपनी it
परिभाषा के अंत में जोड़ सकते हैं :
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
कम से कम यह टाइपस्क्रिप्ट में काम करता है।
.timeout
मोचा के लिए निश्चित रूप से टाइप किए गए टाइपिंग में शामिल नहीं है: i.imgur.com/jQbWCn1.png - एक नियमित रूप से पुराने फ़ंक्शन के साथ this.timeout(2000)
या this.slow(500)
त्रुटियों के बिना काम करता है
it
, यह काम नहीं करता है describe
।
describe()
या context()
?
.timeout
अब निश्चित रूप से Typed के Mocha टाइपिंग में शामिल है Mocha.IRunnable
:। हालाँकि, अगर आप इन परीक्षणों को चलाने के लिए वेबस्टॉर्म आईडीई का उपयोग कर रहे हैं, तो सावधानी का एक नोट: जो भी कारण हो, वेबस्टॉर्म के मोचा एकीकरण प्लगइन अभी भी मोचा परीक्षणों को .timeout()
संलग्न के साथ मान्यता नहीं देता है (जिसका अर्थ है कि कोई 'रन' बटन उनके बगल में प्रकट नहीं होता है), और इस प्रकार मैं this.timeout()
इसके उपयोग की अनुमति देने के लिए तीर के कार्यों से बचने की वकालत करता हूं ।
(चूंकि मैं आज इसमें भाग गया)
ES2015 वसा तीर सिंटैक्स का उपयोग करते समय सावधान रहें:
यह विफल हो जाएगा:
it('accesses the network', done => {
this.timeout(500); // will not work
// *this* binding refers to parent function scope in fat arrow functions!
// i.e. the *this* object of the describe function
done();
});
संपादित करें: यह विफल क्यों होता है:
@Atoth टिप्पणी में उल्लेख के रूप में, वसा तीर कार्यों के लिए अपने स्वयं की जरूरत नहीं है इस बंधन। इसलिए, यह संभव नहीं है कि यह करने के लिए बाँध करने के लिए कार्य इस कॉलबैक की और एक प्रदान टाइमआउट कार्य करते हैं।
नीचे पंक्ति : ऐसे कार्यों के लिए एरो फ़ंक्शंस का उपयोग न करें जिन्हें एक बढ़ी हुई समय की आवश्यकता है।
this
तीर के कार्यों में कोई बंधन नहीं है - उसी तरह से यह नहीं सुझाएगा कि उनके पास किसी तरह का है, बस अलग है। उनके पास केवल लेक्सिकल स्कोप हैं। आप इसे गैर-मौजूदा नहीं बांध सकते। इसीलिए .bind
, .call
आदि इसके साथ काम नहीं करते हैं।
this
है।
यदि आप NodeJS में उपयोग कर रहे हैं तो आप package.json में टाइमआउट सेट कर सकते हैं
"test": "mocha --timeout 10000"
तो आप npm का उपयोग करके चला सकते हैं जैसे:
npm test
आप एक अलग दृष्टिकोण लेने के बारे में भी सोच सकते हैं और कॉल को नेटवर्क संसाधन में स्टब या मॉक ऑब्जेक्ट से बदल सकते हैं। सिनॉन का उपयोग करते हुए , आप अपने विकास के प्रयासों पर ध्यान केंद्रित करते हुए, नेटवर्क सेवा से ऐप को डिकॉप्ल कर सकते हैं।
पर परीक्षण navegation के लिए Express
:
const request = require('supertest');
const server = require('../bin/www');
describe('navegation', () => {
it('login page', function(done) {
this.timeout(4000);
const timeOut = setTimeout(done, 3500);
request(server)
.get('/login')
.expect(200)
.then(res => {
res.text.should.include('Login');
clearTimeout(timeOut);
done();
})
.catch(err => {
console.log(this.test.fullTitle(), err);
clearTimeout(timeOut);
done(err);
});
});
});
उदाहरण में परीक्षण का समय 4000 (4s) है।
नोट: setTimeout(done, 3500)
की तुलना में मामूली done
है परीक्षण के समय के भीतर बुलाया जाता है, लेकिन clearTimeout(timeOut)
यह इन सभी समयों के उपयोग से बचता है।
यह मेरे लिए काम किया! पहले () के साथ काम करने के लिए कुछ भी नहीं मिला
describe("When in a long running test", () => {
it("Should not time out with 2000ms", async () => {
let service = new SomeService();
let result = await service.callToLongRunningProcess();
expect(result).to.be.true;
}).timeout(10000); // Custom Timeout
});