2017-12-11 42 views
11

मान लीजिए कि आप एक सरल मोचा परीक्षण करते हैं:क्या वर्तमान मोचा इंस्टेंस पाने और रनटाइम पर विकल्पों को संपादित करने का कोई तरीका है?

describe("Suite", function(){ 
    it("test",function(doneCallback){ 
     // here be tests 
    }); 
}); 

इस परीक्षण में मैं describe समारोह के भीतर कहीं भी this.timeout(VALUE); जोड़कर टाइमआउट बदल सकते हैं।

हालांकि, timeout मूल्य के अलावा, वहाँ अन्य Mocha options कि विशेष रूप से या तो कमांड लाइन से या एक mocha.opts फ़ाइल है कि परीक्षण फ़ोल्डर (./test/mocha.opts) में रहती है से घोषित किया जा सकता का सेवन कर रहे हैं।

मैं चाहता हूं कि इन विकल्पों में से कुछ को रन-टाइम पर बदलें (उदाहरण के लिए, reporter) और कमांड लाइन/mocha.opts फ़ाइल में नहीं।

संभव है कि मेरे शोध से, मैंने पाया कि an article explaining how you can use mocha programmatically है, जो रन-टाइम पर इन विकल्पों को बदलने की अनुमति देगा, लेकिन आपको Mocha उदाहरण स्वयं को बनाने की आवश्यकता है, जबकि सामान्य परीक्षण में कोई प्रत्यक्ष नहीं होता है Mocha उदाहरण तक पहुंच।

तो, क्या मौजूदा परीक्षण से Mocha उदाहरण प्राप्त करने का कोई तरीका है और परीक्षण के दौरान रन-टाइम पर reporter जैसे कुछ विकल्पों को बदलें?

मैं एक विकल्प (मुझे लगता है कि मैं Mocha उदाहरण के साथ छेड़छाड़ Mocha निर्माता में सीधे एक उदाहरण प्राप्त करने के लिए एक तरह से लागू करने के लिए कर सकते हैं) है कि किसी भी तरह से Mocha के स्रोत कोड को संशोधित करने की आवश्यकता नहीं है करना चाहते हैं ।

+0

ऐसा लगता है कि आप उस लेख का पालन करना चाहते हैं जिसमें आप मोचा इंस्टेंस स्वयं बनाते हैं। – kevzettler

+0

@kevzettler क्या लेख? जिसकी ओर मैंने लिंक किया था? उस व्यक्ति के लिए आपको 'मोचा' इंस्टेंस और 'मोचा' रनर स्वयं (टेस्ट फाइल इत्यादि) बनाने की आवश्यकता है, जबकि मैं कमांड लाइन 'मोचा myTest.js' से उपयोग करना चाहता हूं और' mychaest.js' हुक 'मोचा को 'उदाहरण और रनटाइम – Adelin

+0

पर विकल्पों को संशोधित करने में सक्षम हो, हाँ, https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically आलेख। – kevzettler

उत्तर

2

नहीं, आप नहीं कर सकते। कोड बदलने के बिना

संक्षेप में, मोचा एक ऐसे क्षेत्र में बनाया गया है जिसे आप परीक्षणों से नहीं पहुंच सकते हैं।विवरण में जाकर, आपके दायरे में प्रदान की गई वस्तुएं आपके इच्छित विकल्पों को नहीं बदल सकती हैं। (आप ऐसा नहीं कर सकते: link)

लेकिन प्रत्येक परीक्षा के लिए अपने स्वयं के उत्पादन संवाददाता को परिभाषित करने और अनुकूलित करने के लिए एक तरह से है:

एक फ़ाइल MyCustomReporter.js बुलाया बनाएँ:

'use strict'; 

module.exports = MyCustomReporter; 

function MyCustomReporter (runner) { 

    runner.on('start', function() { 
     var reporter = this.suite.suites["0"].reporter; 
     process.stdout.write('\n'); 

    }); 

    runner.on('pending', function() { 
      process.stdout.write('\n '); 
    }); 

    runner.on('pass', function (test) { 
     var reporter = this.suite.useReporter; 
     if(reporter == 'do this') { 
     } 
     else if(reporter == 'do that'){ 
     } 
     process.stdout.write('\n '); 
     process.stdout.write('passed'); 
    }); 

    runner.on('fail', function() { 
     var reporter = this.suite.useReporter; 
     process.stdout.write('\n '); 
     process.stdout.write('failed '); 
    }); 

    runner.on('end', function() { 
     console.log(); 
    }); 
} 

जब आप मोचा चलाने के लिए, संवाददाता पैरामीटर के रूप में MyCustomReporter.js के रास्ते (.js) के बिना गुजरती हैं, उदाहरण के लिए:

mocha --reporter "/home/user/path/to/MyCustomReporter" 

डिफ़ॉल्ट मोचा स्क्रिप्ट वास्तव में अगर यह (lib/संवाददाताओं से कम) डिफ़ॉल्ट लोगों में नहीं पाया जाता एक पत्रकार फ़ाइल की आवश्यकता होती है की कोशिश करता है, github link

अंत में, अपने परीक्षण में, आप पास कर सकते हैं आपके रिपोर्टर के आउटपुट को कस्टमाइज़ करने के लिए कुछ पैरामीटर:

var assert = require('assert'); 
describe('Array', function() { 
    describe('#indexOf()', function() { 
     this.parent.reporter = 'do this'; 
    it('should return -1 when the value is not present', function() { 
     this.runnable().parent.useReporter = 'do this'; 
     assert.equal([1,2,3].indexOf(4), -1); 
    }); 
    }); 
}); 
+0

मैंने इस तथ्य का उत्तर स्वीकार कर लिया कि वास्तव में, आप किसी अन्य संदर्भ से उदाहरण नहीं प्राप्त कर सकते हैं और इस तथ्य के लिए कि [जिस लिंक का आपने उल्लेख किया है] (https://stackoverflow.com/questions/1789892/access-parent-object -इन-जावास्क्रिप्ट) बेहतर समझने के लिए मेरे लिए एक अच्छा संसाधन था। हालांकि, वह हिस्सा जहां आप एक कस्टम संवाददाता बनाने के बारे में बताते हैं, मेरे लिए, जुआ था। मेरे पास पहले से एक है और मैं रनटाइम पर एक कस्टम रिपोर्टर ('list') से एक कस्टम संवाददाता से स्विच करना चाहता था। – Adelin

2

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

reporter पैरामीटर यहाँ बदलने के बारे में अपनी पूछताछ के लिए

तो एक संक्षिप्त उदाहरण है कि आप क्या चाहते हैं क्या करना होगा, ताकि एक सैद्धांतिक रूप से पहले से ही विद्यमान test-file-a.js नाम की फ़ाइल के खिलाफ परीक्षण चलाने के लिए है अपने परीक्षण में शामिल है कि:

var Mocha = require('mocha'), 
    mocha = new Mocha(), 
    path = require('path'); 

mocha.addFile(path.join(__dirname, 'test-file-a.js')); 

mocha 
    .reporter('list') 
    .run(); 

इसके अलावा वहाँ बहुत सारे अन्य विकल्प है कि आप उपयोग कर सकते हैं और यह भी वहाँ की घटनाओं के लिए कुछ श्रोताओं test है कि आप उदाहरण के लिए एक परीक्षण के दौरान कुछ करने के लिए, चाहते हो सकता है की तरह है, कर रहे हैं कि:

mocha 
    .reporter('list') 
    .ui('tdd') 
    .bail() 
    .timeout(10000) 
    .run()  
    .on('test', function(test) { 
     if (test.title === 'some title that you want here') { 
      //do something 
     } 
    }); 

कृपया ध्यान दें कि आप प्रत्येक मोचा उदाहरण है कि फिर से टेस्ट स्वीट चलेंगे प्रति विकल्प परिभाषित कर सकते हैं, लेकिन टेस्ट स्वीट के क्रम दौरान नहीं तो उदाहरण के लिए यदि आप अपने परीक्षण test-file-a.js के लिए आप ऊपर के रूप में विकल्प reporter('list') के साथ शुरू परीक्षण किसी अन्य चीज़ पर चल रहे हैं, जबकि आप इसे बदल नहीं सकते हैं, उदाहरण के लिए आप timeout विकल्प के साथ उदाहरण कर सकते हैं जहां आप this.timeout() कर सकते हैं।

तो आपको हर बार विभिन्न विकल्पों के साथ ऊपर दिए गए उदाहरणों के रूप में एक नया Mocha उदाहरण तत्काल करना होगा।

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

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