2012-04-17 3 views
9

Я новичок в Qunit и модульном тестировании.Утверждение, что функция генерирует исключения из 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')} 

}; 

Как я могу идти о утверждая, что ошибка будет брошен, если какой-либо из этих условий не выполняются?

Я попытался взглянуть на утверждение «поднимает» Qunit, но думаю, что я его неправильно понимаю. Моя интерпретация будет заключаться в том, что тест проходит, если возникает ошибка.

Так что, если я испытал что-то вроде этого:

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

Испытание должно пройти, так как ошибки выбрасываются.

ответ

15

Пару вещей неправильно, рабочий пример на http://jsfiddle.net/Z8QxA/1/

Основная проблема заключается в том, что вы передаете неправильные вещи в качестве второго аргумента raises(). second argument используется для проверки того, что была выбрана правильная ошибка, поэтому она либо ожидает регулярное выражение, либо конструктор типа ошибки, либо обратный вызов, который позволяет вам выполнять собственную проверку.

Так что в вашем примере вы проходили attrToggle как тип ошибки, которая была бы выбрана. Ваш код действительно выдает тип Error, поэтому проверка действительно не удалась. Переходя Error в качестве второго аргумента работает, как вы хотите:

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

Во-вторых, вам не нужно throw ключевого слова при вызове attrToggle() внутри raises().

1

yup, вы почти все поняли. raises() ожидает, что возникшая ошибка при тестировании кода.

Обычно я использую try-catch для выполнения моих функций для поиска неправильных типов аргументов. Я использую raises() для тестирования throw. Если я поместил неправильное значение в качестве аргумента, и тест не соответствовал raises(), то что-то не было поймано.

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