2015-11-16 10 views
5

के साथ प्रयास करें/पकड़ें मेरे पास एक ऐसा फ़ंक्शन है जो JSON ऑब्जेक्ट के रूप में पैरामीटर को पार्स करने का प्रयास करता है। अगर यह असफल रहा, तो यह इसके बजाय फ़ॉलबैक का उपयोग करता है।जैस्मीन

पार्स-code.js

function parseCode(code) { 
    try { 
     usingJSONFallback(code); 
    } catch() { 
     usingStringFallback(code); 
    } 
} 

function usingJSONFallback(code) { 
    JSON.parse(code); 
    //...more code here 
} 

function usingStringFallback(code) { 
    //... more code here 
} 

main.js

//Some code... 
parseCode('hello world!'); 

मैं इस कोड में किसी भी मुद्दे नहीं दिखाई दे रहा। हालांकि, जब मैं 'कैच' मामले के लिए कुछ यूनिट परीक्षण (जैस्मीन 2.3 का उपयोग करके) जोड़ने की कोशिश कर रहा हूं, जैस्मीन जेएसओएन पार्सिंग त्रुटि को अपने आप से पकड़ता है और परीक्षण को रोकता है:

उदाहरण के लिए, जैस्मीन परीक्षण के लिए :

describe('parseCode', function() { 
    it('Parses a string', function() { 
     var code = 'My code without JSON'; 
     expect(parseCode(code)).toThrow(); 
    }); 
}); 

या यहां तक ​​कि एक परीक्षण की तरह:

describe('usingJSONFallback', function() { 
    it('Throw an error if there is a string', function() { 
     var code = 'My code without JSON'; 
     expect(usingJSONFallback(code)).toThrow(); 
    }); 
}); 

दोनों मामलों में, परीक्षण विफल रहता है और रिटर्न:

SyntaxError: Unable to parse JSON string 

मैंने throw Error(...) का उपयोग कर नियंत्रित अपवादों को फेंकने के बारे में पढ़ा है, लेकिन निश्चित रूप से यह मेरे मामले के लिए उपयुक्त नहीं है। इस मामले में जैस्मीन का उपयोग करने के बारे में कोई सुझाव?

उत्तर

7

आप फ़ंक्शन को स्वयं कॉल नहीं कर सकते हैं, आपको जैस्मीन को रैपर फ़ंक्शन जोड़कर कॉल करना होगा। इसे समझाने का एक और तरीका यह है कि expect को उस फंक्शन की आवश्यकता होती है जब आप इसे फेंकने के लिए परीक्षण कर रहे हों।

describe('parseCode', function() { 
    it('Parses a string', function() { 
     var code = 'My code without JSON'; 
     expect(function() { parseCode(code) }).toThrow(); 
    }); 
}); 

उनके example page से, ध्यान दें कि फ़ंक्शन पास हो गया है लेकिन नहीं कहा जाता है।

it("The 'toThrowError' matcher is for testing a specific thrown exception", function() { 
    var foo = function() { 
     throw new TypeError("foo bar baz"); 
    }; 

    expect(foo).toThrowError("foo bar baz"); 
    expect(foo).toThrowError(/bar/); 
    expect(foo).toThrowError(TypeError); 
    expect(foo).toThrowError(TypeError, "foo bar baz"); 
    }); 
3

क्या आपने दिए गए एफएन को लपेटने की कोशिश की है? इस तरह चमेली इसे अपने आप निष्पादित करने में सक्षम होंगे और इसे पकड़ने के लिए अतिरिक्त कोड प्रदान करेंगे।

describe("usingJSONFallback", function() { 

    it("should throw an error if it's called with a string", function() { 

     expect(function() { 
      usingJSONFallback("any string"); 
     }).toThrow(); 

    }); 

});