2014-02-06 6 views
0

У меня есть некоторые данные в формате JSON внутри элемента HTML данных:Каков наилучший способ проверить исключения SyntaxError в QUnit?

<div id="ps-data" data-ps=" 
     { 
      "teacherId": 12345678 
     }, 
"></div> 

я анализирую его с помощью parseJSON функции JQuery, но если я передаю его недействительным JSON, я получаю исключение SyntaxError. В QUnit это проявляется как глобальный сбой, но я бы хотел, чтобы он потерпел неудачу в одном из моих тестовых случаев. Каков наилучший способ сделать это?

Мой синтаксический код выглядит следующим образом:

$.parseJSON($('#ps-data').data().ps); 
+0

Вы можете использовать операторы 'try catch' –

+0

Я думаю, мой вопрос с этим будет: как я могу проверить, что не было исключений? –

ответ

1

Вы могли бы сделать что-то вроде этого:

var exeptionReached = false; 
try { 
    $.parseJSON($('#ps-data').data().ps); 
} catch(e) { 
    exceptionReached = true; 
} 
console.log(exceptionReached); //will be true if `parseJSON()` threw an exception 

Использование QUnit утверждать исключение было достигнуто ... или вы можете сохранить что-то от объекта исключения если вы хотите принять что-то конкретное, например:

var ex; 
try { 
    $.parseJSON($('#ps-data').data().ps); 
} catch(e) { 
    ex = e; 
} 
console.log(ex.message); // something like "Unexpected token ," 

Вы будете хотите проверить, что ex определен до доступа к свойствам курса. Я думаю, вы должны уметь видеть, как вы можете проверить, произошло ли исключение, и как проверить специфику этого исключения, если вы хотите ... но дайте мне знать, если у вас есть дополнительные вопросы.

JSFiddle example

0

Вот полный пример того, что я делаю на основе ответа smerny в.

function testParse() { 
    var exceptionMsg; 
    try { 
     var data = $j.parseJSON($j('#ps-data').data().ps); 
    } catch (e) { 
     exceptionMsg = e.message; 
    } 
    return exceptionMsg; 
} 

strictEqual(testParse(), undefined, 'ps data parses with no exceptions'); 

Это покажет мне сообщение об исключении, если оно не удастся.

Смежные вопросы