Karma — тестируем javascript в консоли

от автора

Здравствуйте. Признаюсь честно, я пишу тесты редко. Т.е хотел бы чаще, но все как-то не получается. Вроде и руководство в принципе не против даже, но все равно находятся задачи посрочнее и поважнее. Тем не менее на днях заглянув в 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

ссылка на оригинал статьи http://habrahabr.ru/post/187094/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *