जावास्क्रिप्ट कोड के लिए यूनिट परीक्षण और कोडकवरेज

इस नोट में, मैं JS- कोड के यूनिट टेस्टिंग में अपने अनुभव के बारे में बात करूँगा, js-test-driver टेस्ट रनटाइम वातावरण का उपयोग करने का अनुभव, इसकी कोड कवरेज क्षमताओं और साँप के साथ हेजहॉग को घुमा देना, अर्थात् js-test-driver और रिपोर्ट जनरेटर से कोड कवरेज डेटा PHP_CodeCoverage कवरेज के बारे में। मैं बताऊंगा और दिखाऊंगा कि कोड कवरेज पर ऐसी रिपोर्ट कैसे प्राप्त होती है ...

इसलिए, JS कोड के लिए इकाई परीक्षण लागू करना आवश्यक था। जेएस-परीक्षण-चालक को निष्पादन के लिए पर्यावरण और परीक्षण लिखने के लिए रूपरेखा के रूप में चुना गया था। कारण इस प्रकार हैं:

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

चलो व्यापार में प्रयास करें


कोड हम परीक्षण करेंगे

var greeter = function(toSay){ this.whatToSay = toSay; } greeter.prototype.say = function(sayBye){ if(sayBye == true) return "Goodbye " + this.whatToSay; else return "Hello " + this.whatToSay; } 

और परीक्षण करें

 var testCase = new TestCase("Say"); testCase.prototype.testCase1 = function(){ var i = new greeter('test'); assertEquals("Hello test", i.say(false)); }; 

फ़ाइल संरचना

  \jstd \plugins coverage.jar code.js test.js conf jstestdriver.jar 

चलाने के लिए कॉन्फ़िगरेशन (YAML प्रारूप में फ़ाइल दर्ज करें)

 load: - code.js - test.js server: http://localhost:4224 


हम लॉन्च करते हैं


सबसे पहले, सर्वर शुरू करें

 H:\jstd>java -jar jstestdriver.jar --port 4224 

हम ब्राउज़र लॉन्च करते हैं, हम लोकलहोस्ट पर जाते हैं: 4224, हम ब्राउज़र को मास्टर करते हैं। हम टेस्ट रन शुरू करते हैं।
UPD: आप मनमानी ब्राउज़रों की संख्या के परीक्षण से जुड़ सकते हैं। तुम भी एक और ओएस के तहत एक दूरस्थ मशीन से कनेक्ट कर सकते हैं। किसी ब्राउजर को टेस्टिंग के लिए कनेक्ट करना == एक निश्चित सर्वर पर एक पेज खोलना (जो इस मामले में आपका js-test-driver सर्वर है)


 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all .. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) 

हम देखते हैं कि हमने केवल 2 परीक्षण किए। सहित क्रोम ब्राउज़र में - 1, और यह सफ़ारी ब्राउज़र में भी सफल रहा - 1 भी और सफलतापूर्वक भी। सब कुछ महान है।

कोड कवरेज के बारे में क्या?


CodeCoverage एक अलग प्लगइन द्वारा जुड़ा हुआ है । कवरेज डेटा को परीक्षण निष्पादन के अंत में स्थिर जानकारी के रूप में प्रदर्शित किया जा सकता है (ऐसी फ़ाइल को N% द्वारा कवर किया गया है), या इसे LCOV फ़ाइल में अपलोड किया जा सकता है। लेखक genhtml टूल का उपयोग करके विज़ुअल रिपोर्ट बनाने का प्रस्ताव देते हैं। Win32 पोर्ट किए गए परिणामों के लिए एक त्वरित खोज काम नहीं आई; मुझे साइगविन या रिपोर्ट बनाने के लिए एक अलग मशीन बढ़ाने का मन नहीं है ...

कोड कवरेज के साथ परीक्षण चलाएं


प्लगइन कनेक्ट करें। कॉन्फ़िगरेशन फ़ाइल (कॉन्फ़ि) संपादित करें।

 load: - code.js - test.js server: http://localhost:4224 plugin: - name: "coverage" jar: "plugins/coverage.jar" module: "com.google.jstestdriver.coverage.CoverageModule" 

परीक्षण चलाएं

 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all Safari: Runner reset. .Safari: Runner reset. Chrome: Runner reset. .Chrome: Runner reset. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (0,00 ms) H:/jstd/code.js: 83.33333% covered H:/jstd/test.js: 100.0% covered 

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

 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all --testOutput ./out Safari: Runner reset. .Safari: Runner reset. Chrome: Runner reset. .Chrome: Runner reset. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) 

अब कवरेज जानकारी बिल्कुल भी दिखाई नहीं देती है, लेकिन LCOV प्रारूप में कवरेज वाली एक फ़ाइल ./out फ़ोल्डर में दिखाई देती है।

LCOV प्रारूप


Js-test-Driver द्वारा उत्पन्न lcov फ़ाइल का प्रारूप बेहद सरल है।

 SF:H:/jstd/code.js DA:1,2 DA:2,2 DA:5,2 DA:6,2 DA:7,0 DA:9,2 end_of_record SF:H:/jstd/test.js DA:1,2 DA:3,2 DA:4,2 DA:5,2 end_of_record 

SF वह फाइल है जिसके लिए डेटा नीचे दिया गया है, DA कवरेज डेटा है (DA: स्ट्रिंग, हाउ मेनी टाइम्स परफॉर्म किया)।

हम एक सुंदर रिपोर्ट बनाते हैं: PHP_CodeCoverage


PHPUnit - PHP के लिए इकाई परीक्षण को लागू करने के लिए एक रूपरेखा, कोड कवरेज रिपोर्ट उत्पन्न करने की क्षमता है। CodeCoverage मॉड्यूल को अलग करना और बहुत करीने से लागू करना बहुत आसान है। संरचना में PHP_CodeCoverage_Driver इंटरफ़ेस शामिल है, इसे लागू करने वाली कक्षाएं परियोजना के अन्य घटकों (रिपोर्ट बिल्डर सहित) के लिए कोड कवरेज पर डेटा के स्रोत के रूप में काम कर सकती हैं।

Xdebug। वह कवरेज डेटा कैसे देता है?


फ़ाइल के लिए ...

 <?php xdebug_start_code_coverage(); function a() { $x = 10; } $b = 30; var_dump(xdebug_get_code_coverage()); 

हमें इसका परिणाम मिलता है ...

 array( 'Z:\home\test\www\test.php' => array( 4 => 1 8 => 1 10 => 1 ) ); 

यह देखा जा सकता है कि प्रारूप बहुत समान हैं, आप अपना खुद का ड्राइवर बना सकते हैं
नीचे एक कवरेज रिपोर्ट बनाने वाले कोड का एक सरल उदाहरण है। यह माना जाता है कि कवरेज डेटा कवरेज में है। फ़ाइल। रिपोर्ट CodeCoverageReport फ़ोल्डर में स्थित होगी।

 <?php include('PHP/CodeCoverage.php'); include('PHP/CodeCoverage/Driver/Lcov.php'); include('PHP/CodeCoverage/Report/HTML.php'); // ./lcov_coverage.dat contains ine coverage report in LCOV format $coverage = new PHP_CodeCoverage(new PHP_CodeCoverage_Driver_Lcov('./coverage.dat')); $coverage->start('mytest'); $coverage->stop(); $writer = new PHP_CodeCoverage_Report_HTML(); $writer->process($coverage, 'CodeCoverageReport'); 

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

Source: https://habr.com/ru/post/In105696/


All Articles