जावास्क्रिप्ट के साथ स्वचालित यूनिट परीक्षण

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

क्या किसी के पास कोई भाग्य स्वचालित है (एएनटी के साथ) एक यूनिट परीक्षण लाइब्रेरी जैसे यूयूआई परीक्षण, jQuery के QUNit, या jqunit ( http://code.google.com/p/jqunit/ )?

नोट: मैं एक कस्टम निर्मित AJAX लाइब्रेरी का उपयोग करता हूं, इसलिए डोजो के डीओएच के साथ समस्या यह है कि आपको किसी भी AJAX इकाई परीक्षण के साथ काम करने के लिए अपने स्वयं के AJAX फ़ंक्शन कॉल और ईवेंट हैंडलर का उपयोग करने की आवश्यकता होती है।

0
संबंधित प्रश्न: बेहतर जावास्क्रिप्ट इकाई परीक्षण उपकरण के लिए stackoverflow .com/प्रश्न/300,855/& hellip;
जोड़ा लेखक Jacques Bosch, स्रोत

14 उत्तर

मैंने हाल ही में ब्रूनो द्वारा जेएसयूनीट का उपयोग करके एक लेख पढ़ा और उस पर शीर्ष पर जेएसएमॉक फ्रेमवर्क बनाया ... बहुत रोचक। मैं अपने जावास्क्रिप्ट कोड को यूनिट परीक्षण शुरू करने के लिए अपने काम का उपयोग करने के बारे में सोच रहा हूं।

ब्राउज़र वातावरण के बाहर जावास्क्रिप्ट या कैसे यूनिट परीक्षण जावास्क्रिप्ट का परीक्षण करें

0
जोड़ा

वहां कई जावास्क्रिप्ट यूनिट टेस्ट फ्रेमवर्क हैं (जेएसयूनीट, स्क्रिप्चुअल, ...) लेकिन जेएसयूनीट एकमात्र ऐसा है जिसे मैं जानता हूं जिसका उपयोग स्वचालित निर्माण के साथ किया जा सकता है।

यदि आप 'सत्य' इकाई परीक्षण कर रहे हैं तो आपको AJAX समर्थन की आवश्यकता नहीं है। उदाहरण के लिए, यदि आप डीडब्ल्यूआर जैसे आरपीसी AJAX फ्रेमवर्क का उपयोग कर रहे हैं, तो आप आसानी से एक नकली फ़ंक्शन लिख सकते हैं:

   function mockFunction(someArg, callback) {
      var result = ...;//some treatments   
      setTimeout(
function() { callback(result); }, 300 //some fake latency
); }

And yes, JsUnit do handle timeouts : Simulating Time in jsUnit Tests

0
जोड़ा

Look into YUITest

0
जोड़ा

ब्राउज़र का उपयोग किए बिना ब्राउज़र-निर्भर जावास्क्रिप्ट परीक्षणों को सत्यापित करने के लिए मैंने एक छोटी लाइब्रेरी प्रकाशित की है। यह एक node.js मॉड्यूल है जो परीक्षण पृष्ठ लोड करने और परिणामों का निरीक्षण करने के लिए zombie.js का उपयोग करता है। मैंने इसके बारे में लिखा है मेरे ब्लॉग पर । यहां स्वचालन दिखता है:

var browsertest = require('../browsertest.js').browsertest;

describe('browser tests', function() {

it('should properly report the result of a mocha test page', function (done) {
    browsertest({
        url: "file:///home/liam/work/browser-js-testing/tests.html",
        callback: function() { 
            done();
        }
    });
});

});
0
जोड़ा

मैंने आपकी प्रश्न की तारीख को देखा और फिर कुछ अच्छे जेएस परीक्षण lib/ढांचे थे। आज आप टीडीडी, बीडीडी, एसेटियन और धावक समर्थन के बिना/बिना विभिन्न फोकस में पा सकते हैं।

मोचा, चाई, क्विनीट, जैस्मीन, आदि जैसे इस खेल में कई खिलाड़ी हैं ... आप यह ब्लॉग जेएस/मोबाइल/वेब परीक्षण के बारे में कुछ और जानकारी प्राप्त कर सकते हैं ...

0
जोड़ा

एक और जेएस परीक्षण ढांचा जिसे चींटी के साथ चलाया जा सकता है वह CrossCheck है। प्रोजेक्ट के लिए बिल्ड फ़ाइल में चींटी के माध्यम से क्रॉसशेक चलाने का एक उदाहरण है।

क्रॉस चेक, एक ब्राउज़र को अनुकरण करने के लिए सीमित सफलता के साथ प्रयास करता है, जिसमें XMLHttpRequest और टाइमआउट/अंतराल के नकली-शैली कार्यान्वयन शामिल हैं।

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

0
जोड़ा

मैं बस एक नई परियोजना पर जावास्क्रिप्ट टीडीडी करना शुरू कर रहा हूं जिस पर मैं काम कर रहा हूं। मेरी वर्तमान योजना यूनिट परीक्षण करने के लिए qunit का उपयोग करना है। परीक्षणों को विकसित करते समय ब्राउज़र में परीक्षण पृष्ठ को रीफ्रेश करके चलाया जा सकता है।

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

मैं परीक्षण के कोड कवरेज विश्लेषण प्राप्त करने के लिए JSCoverage का उपयोग करने जा रहा हूं। यह सेलेनियम के साथ भी स्वचालित हो जाएगा।

मैं वर्तमान में इसे स्थापित करने के बीच में हूं। एक बार जब सेटअप सेटअप हो जाए तो मैं इस उत्तर को अधिक सटीक विवरण के साथ अपडेट कर दूंगा।


परीक्षण उपकरण:

0
जोड़ा
हाँ, कृपया इसे साझा करें। धन्यवाद
जोड़ा लेखक melaos, स्रोत
मुझे यह सेट अप मिला, लेकिन थोड़ा अलग तकनीकों का उपयोग करना। मैंने QUNit एडाप्टर ( code.google.com/p/js-test-driver/wiki/QUnitAdapter )। मेरे वर्तमान नियोक्ता में एक और मैं जैस्मीन परीक्षण ढांचे का उपयोग कर रहा हूं, और जैस्मीन नोड में परीक्षण चला रहा हूं ( github.com/mhevery/jasmine-node ) जो ब्राउज़र क
जोड़ा लेखक Karl, स्रोत
सेलेनियम का सबसे अच्छा उपयोग बहुत अधिक है। आदमी, मैंने उस चीज़ के साथ बहुत समय बर्बाद कर दिया है। गुस्सा आना
जोड़ा लेखक the0ther, स्रोत
क्या आपने कभी यह सेट अप किया है? यह कैसे हुआ?
जोड़ा लेखक El Yobo, स्रोत
हाय @ कार्ल.मैं ने कुनिट को एक उपयोगी टूल के रूप में भी पाया लेकिन पता नहीं कि वास्तव में क्या परीक्षण करना है। मैं संयोजन, एनिमेशन के साथ जावास्क्रिप्ट में लिखा एक गेम तर्क है। क्या आप मुझे कुछ जानकारी के साथ मदद कर सकते हैं? धन्यवाद।
जोड़ा लेखक Anahit Ghazaryan, स्रोत

Im a big fan of js-test-driver

यह सीआई पर्यावरण में अच्छी तरह से काम करता है और क्रॉस-ब्राउज़र परीक्षण के लिए वास्तविक ब्राउज़र को कैप्चर करने में सक्षम है।

0
जोड़ा
मुझे सीआई एकीकरण की वजह से यह पसंद है लेकिन लगता है कि इसका सबसे अच्छा प्लस प्वाइंट यह है कि यह यूयूआईटीएस्ट और क्विनीट के साथ काम करता है!
जोड़ा लेखक AutomatedTester, स्रोत

मैं इस समझौते में हूं कि जसुनिट बेल पर मरने की तरह है। हमने इसे यूयूआई टेस्ट के साथ बदल दिया।

QUnit का उपयोग कर उदाहरण के समान, हम सेलेनियम का उपयोग करके परीक्षण चला रहे हैं। हम इस परीक्षण को हमारे अन्य सेलेनियम परीक्षणों से स्वतंत्र रूप से चला रहे हैं क्योंकि इसमें सामान्य यूआई रिग्रेशन परीक्षणों (जैसे सर्वर पर ऐप को तैनात करना) निर्भरता नहीं है।

शुरू करने के लिए, हमारे पास मूल जावास्क्रिप्ट फ़ाइल है जो हमारी सभी परीक्षण HTML फ़ाइलों में शामिल है। यह वाईयूआई इंस्टेंस, टेस्ट रनर, वाईयूआई.स्टेस्ट ऑब्जेक्ट के साथ-साथ टेस्ट। केस स्थापित करने में संभालता है। इसमें एक विधि है जिसे टेस्ट सूट चलाने के लिए सेलेनियम के माध्यम से एक्सेस किया जा सकता है, यह जांचने के लिए जांचें कि क्या परीक्षण धावक अभी भी चल रहा है (परिणाम तब तक उपलब्ध नहीं हैं जब तक यह पूरा नहीं हो जाता है), और परीक्षा परिणाम प्राप्त करें (हमने JSON प्रारूप चुना है)

var yui_instance; //the YUI instance
var runner;  //The YAHOO.Test.Runner
var Assert; //an instance of YAHOO.Test.Assert to save coding
var testSuite; //The YAHOO.Test.Suite that will get run.

/**
 * Sets the required value for the name property on the given template, creates
 * and returns a new YUI Test.Case object.
 * 
 * @param template the template object containing all of the tests
 */
function setupTestCase(template) {
    template.name = "jsTestCase";
    var test_case = new yui_instance.Test.Case(template);
    return test_case;
}

/**
 * Sets up the test suite with a single test case using the given 
 * template.
 * 
 * @param template the template object containing all of the tests
 */
function setupTestSuite(template) {
    var test_case = setupTestCase(template);
    testSuite = new yui_instance.Test.Suite("Bond JS Test Suite");
    testSuite.add(test_case);
}

/**
 * Runs the YAHOO.Test.Suite
 */
function runTestSuite() {
    runner = yui_instance.Test.Runner;
    Assert = yui_instance.Assert;

    runner.clear();
    runner.add(testSuite);
    runner.run();
}

/**
 * Used to see if the YAHOO.Test.Runner is still running.  The
 * test results are not available until it is done running.
 */
function isRunning() {
    return runner.isRunning();
}

/**
 * Gets the results from the YAHOO.Test.Runner
 */
function getTestResults() {
    return runner.getResults(yui_instance.Test.Format.JSON);
}

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

वास्तविक परीक्षण सिर्फ परीक्षा परिणाम का दावा करता है। यदि यह "पास" के बराबर नहीं है तो यह वाईयूआई परीक्षा परिणाम से लौटाए गए संदेश के साथ परीक्षण में विफल रहता है।

    @Parameters
public static List data() throws Exception {
    yui_test_codebase = "file:///c://myapppath/yui/tests";

    List testResults = new ArrayList(); pageNames = new ArrayList(); pageNames.add("yuiTest1.html"); pageNames.add("yuiTest2.html"); testResults.addAll(runJSTestsInBrowser(IE_NOPROXY)); testResults.addAll(runJSTestsInBrowser(FIREFOX)); return testResults; } /** * Creates a selenium instance for the given browser, and runs each * YUI Test page. * * @param aBrowser * @return */ private static List runJSTestsInBrowser(Browser aBrowser) { String yui_test_codebase = "file:///c://myapppath/yui/tests/"; String browser_bot = "this.browserbot.getCurrentWindow()" List testResults = new ArrayList(); selenium = new DefaultSelenium(APPLICATION_SERVER, REMOTE_CONTROL_PORT, aBrowser.getCommand(), yui_test_codebase); try { selenium.start(); /* * Run the test here */ for (String page_name : pageNames) { selenium.open(yui_test_codebase + page_name); //Wait for the YAHOO instance to be available selenium.waitForCondition(browser_bot + ".yui_instance != undefined", "10000"); selenium.getEval("dom=runYUITestSuite(" + browser_bot + ")"); //Output from the tests is not available until //the YAHOO.Test.Runner is done running the suite selenium.waitForCondition("!" + browser_bot + ".isRunning()", "10000"); String output = selenium.getEval("dom=getYUITestResults(" + browser_bot + ")"); JSONObject results = JSONObject.fromObject(output); JSONObject test_case = results.getJSONObject("jsTestCase"); JSONArray testCasePropertyNames = test_case.names(); Iterator itr = testCasePropertyNames.iterator(); /* * From the output, build an array with the following: * Test file * Test name * status (result) * message */ while(itr.hasNext()) { String name = (String)itr.next(); if(name.startsWith("test")) { JSONObject testResult = test_case.getJSONObject(name); String test_name = testResult.getString("name"); String test_result = testResult.getString("result"); String test_message = testResult.getString("message"); Object[] testResultObject = {aBrowser.getCommand(), page_name, test_name, test_result, test_message}; testResults.add(testResultObject); } } } } finally { //if an exception is thrown, this will guarantee that the selenium instance //is shut down properly selenium.stop(); selenium = null; } return testResults; } /** * Inspects each test result and fails if the testResult was not "pass" */ @Test public void inspectTestResults() { if(!this.testResult.equalsIgnoreCase("pass")) { fail(String.format(MESSAGE_FORMAT, this.browser, this.pageName, this.testName, this.message)); } } 

मुझे आशा है कि यह मददगार है।

0
जोड़ा

मैं बस JasmineBDD चलाने के लिए हडसन सीआई प्राप्त किया (हेडलेस), पर कम से कम शुद्ध जावास्क्रिप्ट इकाई परीक्षण के लिए।

(हडसन शैल के माध्यम से जावा चला रहा है, एनवीजे चला रहा है, जैस्मीन बीडीडी चला रहा है।)

मुझे अभी तक एक बड़ी लाइब्रेरी के साथ अच्छा खेलने के लिए नहीं मिला है, हालांकि प्रोटोटाइप की तरह।

0
जोड़ा

एक नई परियोजना है जो आपको जावा वातावरण (जैसे चींटी) में qunit परीक्षण चलाने देती है ताकि आप पूरी तरह एकीकृत हो सकें आपके अन्य यूनिट परीक्षणों के साथ आपका क्लाइंट-साइड टेस्ट सूट।

http://qunit-test-runner.googlecode.com

मैंने इसे यूनिट परीक्षण jQuery प्लगइन्स, objx कोड, कस्टम ओओ जावास्क्रिप्ट में उपयोग किया है और यह बिना किसी संशोधन के सबकुछ के लिए काम करता है।

0
जोड़ा

जिस परियोजना पर मैं काम कर रहा हूं वह जेएस-टेस्ट-ड्राइवर होस्टिंग जैस्मीन क्रोम 10 पर जैस्मीन-जेएसटीडी-एडाप्टर कोड कवरेज परीक्षण शामिल हैं। हालांकि हर बार कुछ समस्याएं होती हैं जब हम सीआई पर्यावरण पर ब्राउज़र बदलते या अपडेट करते हैं, तो जैस्मीन परीक्षण चल रहे हैं Ansynchronous परीक्षणों के साथ केवल मामूली मुद्दों के साथ सुचारू रूप से सुचारू रूप से, लेकिन जहां तक ​​मुझे पता है कि इन्हें जैस्मीन घड़ी का उपयोग करके चारों ओर काम किया जा सकता है लेकिन मुझे अभी तक उन्हें पकड़ने का मौका नहीं मिला है।

0
जोड़ा

मैंने एक चींटी कार्य लिखा है जो एक एंटी के भीतर QUNit HTML परीक्षण फ़ाइलों को चलाने के लिए प्रेत जेएस , एक हेडलेस वेबकिट ब्राउज़र का उपयोग करता है निर्माण प्रक्रिया। यदि कोई परीक्षण विफल हो जाता है तो यह निर्माण में भी असफल हो सकता है।

https://github.com/philmander/ant-jstestrunner

0
जोड़ा

यह कई परीक्षण उपकरणों का एक अच्छा मूल्यांकन है।

टीडीडी के लिए जावास्क्रिप्ट इकाई परीक्षण उपकरण

I personally prefer https://code.google.com/p/js-test-driver/

0
जोड़ा
QAIndia
QAIndia
160 प्रतिभागियों की

QA India ! Unite Here we share job postings , prepare for interviews and share tips/techniques in QA. Please follow following guideline while sharing any job ... QA job # location : # title Company : Title : Requirement: Responsibility: Apply: