2012-04-17 14 views
9

के साथ अपवाद फेंकता है मैं कुनीट और यूनिट परीक्षण के लिए नया हूं।यह कहते हुए कि एक समारोह Qunit

मैं यह जानने का प्रयास कर रहा हूं कि निम्न कार्य का परीक्षण कैसे करें और कैसे करें। यह क्षण में ज्यादा कुछ नहीं है, लेकिन मैं बात पर जोर देना है कि त्रुटियों फेंक दिया जा रहा है अगर मैं इसे गलत मान पारित चाहता था:

function attrToggle (panel, attr) { 
    'use strict'; 

    if (!panel) { throw new Error('Panel is not defined'); } 
    if (!attr) { throw new Error('Attr is not defined'); } 
    if (typeof panel !== 'string') { throw new Error('Panel is not a string'); } 
    if (typeof attr !== 'string') { throw new Error('Attr is not a string'); } 
    if (arguments.length !== 2) { throw new Error('There should be only two arguments passed to this function')} 

}; 

मैं जोर देते हुए कि इन शर्तों के किसी भी करता है, तो एक त्रुटि फेंक दिया जाएगा के बारे में जाना कैसे करते हैं नहीं मिले हैं?

मैंने कुनीट के 'उठाए' दावे को देखने की कोशिश की लेकिन मुझे लगता है कि मैं इसे गलत समझ रहा हूं। मेरी व्याख्या यह होगी कि यदि कोई त्रुटि फेंक दी जाती है तो परीक्षा उत्तीर्ण होती है।

तो अगर मैं कुछ इस तरह का परीक्षण किया:

test("a test", function() { 
    raises(function() { 
     throw attrToggle([], []); 
    }, attrToggle, "must throw error to pass"); 
}); 

टेस्ट पास करना चाहिए, क्योंकि त्रुटियों फेंक दिया जाता है।

उत्तर

15

कोई बात बिगड़ के एक जोड़े, एक काम उदाहरण http://jsfiddle.net/Z8QxA/1/

में मुख्य मुद्दा यह है कि आप raises() से पीछे तर्क के रूप में गलत बात से गुजर रहे हैं है। second argument का उपयोग यह सत्यापित करने के लिए किया जाता है कि सही त्रुटि फेंक दी गई है, इसलिए यह किसी भी regex, त्रुटि के प्रकार का एक निर्माता, या एक कॉलबैक की अपेक्षा करता है जो आपको अपना सत्यापन करने की अनुमति देता है।

तो आपके उदाहरण में, आप attrToggle को उस त्रुटि के प्रकार के रूप में पारित कर रहे थे जो फेंक दिया जाएगा। आपका कोड वास्तव में Error प्रकार फेंकता है और इसलिए चेक वास्तव में विफल रहा। दूसरा तर्क के रूप में Error पासिंग काम करता है आप चाहते हैं:

test("a test", function() { 
    raises(function() { 
     attrToggle([], []); 
    }, Error, "Must throw error to pass."); 
}); 

दूसरे, आप throw कीवर्ड जब raises() अंदर attrToggle() बुला जरूरत नहीं है।

1

yup, आपको काफी सही मिला है। raises() जब आप कोड का परीक्षण करते हैं तो एक फेंकने की त्रुटि की अपेक्षा करता है।

आमतौर पर मैं गलत कार्य प्रकारों को पकड़ने के लिए अपने कार्यों के लिए try-catch का उपयोग करता हूं। throw का परीक्षण करने के लिए मैं raises() का उपयोग करता हूं। अगर मैंने गलत मान को तर्क के रूप में रखा है, और परीक्षण raises() का पालन नहीं करता है तो कुछ पकड़ा नहीं गया था।

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