मैं यूनिट परीक्षण के लिए नया हूं, और यह जांचना चाहता हूं कि कोड की किसी भी पंक्ति में विशेष रूप से डबल लूप शामिल है या नहीं।

मैं वर्तमान में बूटकैंप में अध्ययन कर रहा हूं और वे किसी तरह जांचते हैं कि क्या मेरे समाधान में विशिष्ट लूप (जैसे लूप) है या यदि मैंने नीचे के रूप में नेस्टेड लूप का उपयोग किया है।

Test Code
function () {
    expect(DOUBLE_LOOP_EXP.test(funcBody)).to.be.equal(true);
  } 

स्पष्ट करने के लिए, नीचे मेरा कार्य है जिसे उपरोक्त मानदंड के माध्यम से परीक्षण किया गया है;

function makePermutations(str) {
  let result = '';
  for (let i = 0; i < str.length; i++) {
    for (let j = 0; j < str.length; j++) {
      result += str[i] + str[j] + ',';
    }
  }
  return result.slice(0, result.length - 1);
}
module.exports = makePermutations;

दुर्भाग्य से, यह जानने का कोई तरीका नहीं है कि उस DOUBLE_LOOP_EXP.परीक्षण में क्या है। कृपया सलाह दें।

1
paul.kim1901 13 सितंबर 2020, 04:15

1 उत्तर

सबसे बढ़िया उत्तर

एक रेगेक्सपी कुछ ऐसा हो सकता है:

/for\s*\([^;]+;[^;]+;[^;]+\)\s*{?\s*for\s*\([^;]+;[^;]+;[^;]+\)/

इसके लिए रेगेक्सप्स का उपयोग करना गलत है क्योंकि वे भाषा वाक्यविन्यास से अनजान हैं और इसके परिणामस्वरूप झूठी सकारात्मक या नकारात्मक हो सकती है, उदा। टिप्पणियों का मिलान करें या उन पर अटक जाएं।

इसके लिए जावास्क्रिप्ट सिंटैक्स को पार्स करने की आवश्यकता है। जैसे इस लाइब्रेरी के साथ जो लोकप्रिय Esprima पार्सर (a खेल का मैदान):

const ast = esprima.parse(makePermutations.toString());
const selector = esquery.parse('ForStatement ForStatement');
const nestedFor = esquery.match(ast, selector);

expect(nestedFor.length).toBe(1);

और यह देखते हुए कि प्रश्न परीक्षण पर लागू होता है, यूनिट परीक्षणों में इसकी आवश्यकता कभी नहीं होती है - जब तक कि आप इस कोड को उत्पन्न करने वाले कंपाइलर का परीक्षण नहीं करते हैं।

कार्यान्वयन विवरण पर जोर देने की आवश्यकता हो सकती है, लेकिन इस हद तक नहीं। इकाई परीक्षण के नजरिए से, इससे कोई फर्क नहीं पड़ता कि for लूप हैं। यदि फ़ंक्शन में अन्य इकाइयां शामिल नहीं हैं और साइड इफेक्ट नहीं करते हैं, तो अपेक्षित इनपुट और आउटपुट निर्दिष्ट करके परीक्षण किया जाना चाहिए:

expect(makePermutations('abc')).toBe('aa,ab,ac,ba,bb,bc,ca,cb,cc');
1
Estus Flask 13 सितंबर 2020, 11:12