Здравствуйте. Признаюсь честно, я пишу тесты редко. Т.е хотел бы чаще, но все как-то не получается. Вроде и руководство в принципе не против даже, но все равно находятся задачи посрочнее и поважнее. Тем не менее на днях заглянув в redmine обнаружил что задач практически нет (точнее они были, но требовали сперва дождаться бэкэнда).
Что ж, самое время вспомнить про тесты (конечно нужно было раньше о них думать, но лучше поздно чем никогда).
Вообще я до этого уже пробовал писать тесты, в том числе и на бэкэнде, а конкретно django
. Я еще тогда подумал что было бы здорово запускать тесты из консоли а не в окне браузера. Ну а поскольку с недавнего времени я активно слежу за развитием angular
, то почему бы не посмотреть как это сделано у них. Тем более как-то краем глаза я зацепил момент, что там тесты как раз запускаются в консоли. Плюс к тому же с нуля разбираться в премудростях тестирования не хотелось и я решил взять какой нибудь готовый проект с тестами, посмотреть как оно сделано, и погонять собственно тесты на нем. Мой выбор пал на angular-ui, а точнее на один из его модулей ui-utils.
Скачиваем, заходим в корень видим папку test а в ней файл karma.conf.js
Да и в самом ридми написано, что тесты запускаются так karma start —browsers ….
Гуглим karmajs и находим то что нам нужно karma-runner.github.io/0.8/index.html
Утилита для тестирования. Итак что она может?
- Запускать тесты из консоли
- Автоматически прогонять все тесты при каждом сохранении!!!
- Возможность писать тесты на множестве фреймворков, таких как jasmine, qunit и др.
- Прогонять тесты сразу на нескольких браузерах. (в том числе виртуальных, например fantomjs).
В общем то мне этих возможностей уже оказалось достаточно, чтобы взяться за нее. Но там есть и другие, в которые я пока не вникал, например интеграция с jenkins
Как я уже говорил я решил сначала попробовать на готовом проекте. В общем мои действия:
cd ui-utils
sudo apt-get install nodejs # на самом деле у меня уже давно установлена
sudo npm install karma -g # ставим глобально, но вприципе можно и локально
sudo npm install bower # нужен для того чтобы установить необходимые пакеты для ui-utils
npm install
bower install
Вот собственно и все.
Теперь запускаем в терминале.
karma start --brower=Chrome test/karma.conf.js --auto-watch
После этого у нас запустится браузер Chrome, в котором будет надпись:…
Переходим обратно в терминал, и видим что какие-то тесты запустились, и все они прошли.
Теперь заходим в любой из файлов тестов, они находятся по адресу modules/modulename/test/testnameSpec.js
В какую либо из секций it('...', function() {……
и дописываем
expect(2).toBe(3); # здесь в тестах используется jasmin, но можно использовать и другие фреймворки
сохраняем, смотрим в консоль и видим что-то вроде этого.
.............................................................
Chrome 28.0 (Linux) uiMask initialization should not not happen if the mask is undefined or invalid FAILED
Expected 2 to be 3.
Error: Expected 2 to be 3.
at null.<anonymous> (/home/mn/Documents/www/temp/ui-utils/modules/mask/test/maskSpec.js:25:17)
..........................................................................
Chrome 28.0 (Linux): Executed 136 of 136 (1 FAILED) (1.016 secs / 0.642 secs)
Наш тест обвалился.
Как видите, при сохранении тесты прогоняются автоматически.
Особенно удобно так работать с двумя мониторами. В на одном ты пишешь код, на втором висит терминал и сразу же показывает текущее состояние. В некоторых случаях можно вообще не смотреть в браузер.
Поскольку тесты прогоняются при каждом сохранении, они мельтешат и иногда это мешает. Для такого случая можно использовать команду
karma run
Т.е сперва нужно запустить
karma start test/karma.konf.js —no-auto-wath
и затем, в другом терминале запускать
karma run
Таким образом тесты будут запускаться вручную.
Конечно же я описал далеко не все возможности karma. Скорее этим постом я хотел привлечь ваше внимание к этой интересной утилите. Так что просто посетите сайт и посмотрите все сами.
P.S karma
конечно же можно использовать не только для тестирования angular
, но в целом и для любого другого клиентского кода на js. На текущем проекте мы не используем angular, но тесты на karma писать очень удобно.
P.S раньше эта утилита называлась testacular
Автор: kromxr