Понимание тестирования исключений QUnit
При написании тестов QUnit я был удивлен поведением "бросков". Что касается следующего кода ( http://jsfiddle.net/DuYAc/75/), может кто-нибудь ответить на мои вопросы:
function subfunc() {
throw "subfunc error";
}
function func() {
try {
subfunc();
} catch (e) {}
}
test("official cookbook example", function () {
throws(function () {
throw "error";
}, "Must throw error to pass.");
});
test("Would expect this to work", function () {
throws(subfunc(), "Must throw error to pass.");
});
test("Why do I need this encapsulation?", function () {
throws(function(){subfunc()}, "Must throw error to pass.");
});
test("Would expect this to fail, because func does not throw any exception.", function () {
throws(func(), "Must throw error to pass.");
});
Только второй тест не пройден, хотя это был бы мой естественный выбор написания этого теста...
Вопросы:
1) Почему я должен использовать встроенную функцию, чтобы окружить мою проверенную функцию?
2) Почему не проходит последний тест? 'func' не выдает никаких исключений.
Был бы признателен за любые объяснения.
1 ответ
1) Почему я должен использовать встроенную функцию, чтобы окружить мою проверенную функцию?
Вы не Когда ты пишешь throws(subfunc(), [...])
, subfunc()
оценивается первым. Как subfunc()
выбрасывает за пределы throws
функция, тест не пройден сразу. Чтобы это исправить, нужно пройти throws
функция. function(){subfunc()}
работает, но так же subfunc
:
test("This works", function () {
throws(subfunc, "Must throw error to pass.");
});
2) Почему не проходит последний тест? 'func' не выдает никаких исключений.
По той же причине. func()
оценивается первым. Как нет явного return
заявление, оно возвращает undefined
, Затем, throws
пытается позвонить undefined
, Как undefined
не вызывается, генерируется исключение и тест проходит.
test("This doesn't work", function () {
throws(func, "Must throw error to pass.");
});