Ich habe eine Funktion, die versucht, einen Parameter als ein JSON-Objekt zu analysieren. Wenn es fehlschlägt, wird stattdessen ein Fallback verwendet.Versuchen/fangen mit Jasmin
Parse-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!');
Ich sehe kein Problem in diesem Code. Wenn ich jedoch versuche, einige Unittests (mit Jasmine 2.3) für den Fall "catch" hinzuzufügen, fängt Jasmine den JSON-Parsing-Fehler selbst ab und bricht den Test ab:
Zum Beispiel für einen Jasmin-Test wie :
describe('parseCode', function() {
it('Parses a string', function() {
var code = 'My code without JSON';
expect(parseCode(code)).toThrow();
});
});
oder sogar ein Test wie:
describe('usingJSONFallback', function() {
it('Throw an error if there is a string', function() {
var code = 'My code without JSON';
expect(usingJSONFallback(code)).toThrow();
});
});
In beiden Fällen schlägt der Test fehl und kehrt:
SyntaxError: Unable to parse JSON string
Ich lese über das Werfen kontrollierte Ausnahmen mit throw Error(...)
, aber definitiv passt das nicht gut für meinen Fall. Irgendwelche Vorschläge, wie man Jasmine in diesem Fall benutzt?