Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Node.js > nodeunit, unit testing в JS |
Автор: bilbobagginz 5.4.2013, 15:03 | ||||||||||||||||
привет. Вопрос немного философский конечно, но у кого есть мысли по сабжу ... буду рад услышать. Тема такая - тестирование. Пишется код (client side) на JS. пишется в форме модуля. Ессно, это не реально код приложения, а пример поясняющий проблему. Если бы не было тестов, было бы грубо говоря так, mymodule.js:
запуск этого кода - после добавки в файл HTML:
Надо "покрыть" тестами (не слишком, но покрыть). проблема в том, что я не нашел "архитектурно чистый" подход к тестированию приватных методов модуля. с помощью nodeunit, я могу тестировать "public_method", создав каталог "test", и в нем файлик test_mymodule.js:
запуск теста просто:
Проблема в том, что доступа до mymodule.private_method() нету. В данном примере, ессно, публичная метода - просто обертка и ни хрена не делает. Но в реальном коде приватные методы - как раз то, что хотелось бы протестить. И внешний API тоже, есссно. В общем идеи были разные. Две наиболее популярные были: 1. "загрязнить" боевой модуль дополнительным тестовым кодом Он потом отошлется клиенту непонятно к чему), приведея его к форме:
в тесте определить переменную:
2. разделить mymodule на внутренний под-модуль и тестить оный извне т.е.:
И соотв. в тесте будет 2 региона тестирования:
в C++ можно было сделать какой-то изврат с #ifdef, и этот изврат не попал бы в релизный бинарник. Как же быть в JS? |
Автор: bilbobagginz 6.4.2013, 10:56 |
CruorVult, спасибо. т.е. второй вариант (если много приватных метод вынести их в "утиль"ный модуль, использовать в главном, и тестить утильный модуль отдельно) насчет "скоро".... гугл тут свой дротик (в смысле Dart) замутили... и сидят они как стандартные члены борда ECMA. у тебя есть какая-то секретная инфа насчет когда это произойдет ? |
Автор: CruorVult 8.4.2013, 11:09 | ||||||||
Ничего никуда выносить не нужно. Тестировать приватные методы нужно, но неявно. По средствам паблик методов. Изначально ты все правильно сделал.
Осталось протестировать, когда метод ничего не принимает
Таким образом полностью покрылся приватный метод. Лучше всего, при разработке с написанием тестов, использовать подход http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5. Эта техника по началу кажется непонятной и запутанной, но позволяет очень глубоко обдумать архитектуру приложения без строчки рабочего кода.
Точной информации нету, но предположительно к концу года. |
Автор: bilbobagginz 9.4.2013, 21:12 | ||
т.е. к концу года браузеры волшебным образом запоют на новом жаргоне ? ![]() Добавлено через 2 минуты и 34 секунды
знаком, но по физиологическим причинам страдаю излишним покрытием ненужного тестами, что нередко приводит к непокрытию нужноого ![]() не знаю как лечиться ![]() |
Автор: CruorVult 10.4.2013, 10:03 | ||
На фоне того, что Google переводит Chrome на новый движок рендеринга (Ripple) а также того, что Mozilla и Samsung разрабатывают новый движок для браузеров(под Android), переход на ECMAScript 6 меня ни капельки не удивляет ![]() |