- PVSM.RU - https://www.pvsm.ru -
Добрый день хабр.
Вчера вышла версия 1.1.0 test.it — фреймворка для тестирования js кода.
Он, наконец, обзавёлся функционалом, отсутствие которого делало его неполноценным:
А так же прочими мелочами.
Кто не любит много слов — Сайт [1] на котором можно увидеть код в действии, GitHub [2], Wiki [3]
Звено цепи .addtrace(level) [6] — добавляет к тесту/группе trace — список строк, приведших к его исполнению.
level — задаёт количество выводимых строк (или глубину областей видимости, на которую будет подниматься trace).
Метод был добавлен по просьбе пользователя vk Denya Tatarinov [7], с пояснением, что это полезно для наблюдения за большим количеством асинхронных вызовов (тестов).
У меня есть хорошая привычка, логгировать каждый ajax запрос. точнее ответ от сервера. и когда случается какая то херь, я бы хотел знать в какой строчке это случилось) не писать жеж что вот чувак, это 45 строчка в каждом вызове. + помогает ориентироваться по коду
Для данной задачи хватает вывода только одной (текущей) строки, но мало ли кому понадобиться отследить какой-нибудь запутанный код.
(function firstFunction() {
(function secondFunction() {
(function lastFunction() {
test.it(1).addTrace(0); // добавит только текущую строку
test.it(1).addTrace(); // добавит полный трейс
})();
})();
})();
Подготовитель цепи .time [8] — добавляет к выводу теста время, затраченное на его исполнение (или исполнение функции результат которой был передан тесту)
Обратите внимание, что это не метод, а именно аттрибут. Не ставьте после него скобки!
test.time.it(someThing());
Подготовитель цепи .exclude [9] — предотвращает попадание теста или группы в стек текущего уровня. Это тоже атрибут не ставьте после него скобки!
Может быть полезен для асинхронных тестов.
alert(test.exclude.it(someThing).result()); //выдаст alert с результатом теста
test.exclude.group('some group',function(){ ... }).done(); //выведет группу в консоль
Наконец все эти .group обрели смысл!
.done() [10] — в зависимости от того, как и где был вызван выводит:
test.done();
test.group('group of tests',function(){
test.it(false);
test.done();
test.it(true);
});
test.group('group of tests',function(){
test.it(true);
test.it(false);
}).done();
// или
test.group('group of tests').done();
test.it(true).comment('выведет только этот тест').done();
Благодаря новому поведению .done() (и немного .exclude) теперь доступны асинхронные тесты:
var a = false; // переменная, которую мы изменим через 2 секунды
setTimeout(function () {a=true}, 2000) // асинхронное (через время) изменение переменной
setTimeout(function () {
test.group('async tests',function(){
test.it(a).comment('переменная ещё не изменилась');
}).comment('async group').done(); // вывод результата
}, 1000);
setTimeout(function () {
test.exclude.it(a).comment('переменная уже изменилась').done(); // вывод результата, без добавления его в root
}, 3000);
Через ~3 секунды в консоли будет:
теперь, помимо шлифовки уже сделанного я ставлю приоритетную задачу — порт на node.js и подобные ему языки(?).
Сайт [1] на котором можно увидеть код в действии, GitHub [2], Wiki [3]
Пока занимался рефакторингом, задался вопросом, а кому собственно нужны test.them и test.types? В связи с чем хочу задать вопрос сообществу, какими тестами вы пользуетесь чаще всего? Какие тесты вам в принципе нужны?
В опросе будут указаны тесты только из этого фреймворка, но в комментариях вы можете высказываться относительно тестов в других фреймворках, в том числе для других языков.
Автор: titulusdesiderio
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/41056
Ссылки в тексте:
[1] Сайт: http://titulus.github.io/testit/
[2] GitHub: https://github.com/titulus/testit
[3] Wiki: https://github.com/titulus/testit/wiki
[4] tenphi: http://habrahabr.ru/users/tenphi/
[5] asmgf: https://github.com/asmgf
[6] .addtrace(level): https://github.com/titulus/testit/wiki/API#wiki-.addTrace
[7] Denya Tatarinov: http://vk.com/isdenya
[8] .time: https://github.com/titulus/testit/wiki/API#wiki-.time
[9] .exclude: https://github.com/titulus/testit/wiki/API#wiki-.exclude
[10] .done(): https://github.com/titulus/testit/wiki/API#wiki-.done
[11] Источник: http://habrahabr.ru/post/190200/
Нажмите здесь для печати.