Run tests under Karma

В качестве примера доминирования **karma** над другими test runner-ами, я взял наш репозиторий nano-островов и перевел его на karma.

Вот что получилось:

1. Исчез файл index.html
2. Тестовые файлы автоматически попадают в test runner(Не надо их добавлять/удалять руками, как было с index.html)
3. Нету зависимости от make. Все собирает karma
4. Скорость выполнения test-ов на машине разработчика в режиме **watch** увеличилась в 5-10 раз
5. Скорость выполнения npm test(холодный старт) на машине разработчика увеличилась в 5-раз
6. Есть возможность использовать любой browser(включая IE) при выполнении тестов. По умолчанию в development запускается PhantomJS, но можно запустить karma с любым браузером используя команду karma start --browsers=<список browser-ов> (Перед этим необходимо глобально установить karma-<browser>-launcher)
7. Travis. Тесты запускаются в PhantomJS и Firefox
8. Travis. Скорость npm test почти не изменилась(чуть ускорились)
9. Travis. Появилась возможность(осталось ваше желание) использовать SauceLabs + Travis для запуска тестов на различных платформах и в различных браузерах, karma это позволяет
10. Все настройки осуществляются либо через Gruntfile(task karma), либо karma.conf.js
11. Появилась возможность использовать code-coverage или coffeescript в тестах
12. Улучшился workflow работы с тестми. Тепреь просто использовать `only` и добавлять новые тесты

Минусы:

1. Падает yate-preprocessor при обновлении tests.yate

Запуск тестов через mocha-phantomjs:
![mocha-phantomjs-timing](https://f.cloud.github.com/assets/616193/2369334/3189c972-a7db-11e3-9895-6d886e0ec1b6.png)

Запуск тестов с использованием karma:
![karma-timing](https://f.cloud.github.com/assets/616193/2369338/4b672286-a7db-11e3-8939-e8617e26f56b.png)

Сравнение npm test:
![npm-test-timing](https://f.cloud.github.com/assets/616193/2369339/5b7b5570-a7db-11e3-971b-2dd15ba0afdf.png)

Сборка на travis:
https://travis-ci.org/maksimr/nanoislands

![20140310_02 39 39](https://f.cloud.github.com/assets/616193/2369350/cc17fd9c-a7db-11e3-80f3-5fe21a371d70.png)
![20140310_02 41 13](https://f.cloud.github.com/assets/616193/2369353/0dba7770-a7dc-11e3-84e9-4fb8b7cb59a8.png)

Дополнительно провел небольшой Refactoring Grunfile.js.

*Для оптимального использования инструментов, рекомендую посмотреть:* 
:see_no_evil: 

[About karma](karma-runner.github.io)
[Karma Saucelabs](https://github.com/karma-runner/karma-sauce-launcher)
[Karma official launchers](https://github.com/karma-runner?query=launcher)
[Karma mocha](https://github.com/karma-runner/karma-mocha)
[Karma borschik](https://github.com/maksimr/karma-borschik-preprocessor)
[Karma yate](https://github.com/maksimr/karma-yate-preprocessor)
[Karma sinon-expect](https://github.com/maksimr/karma-sinon-expect)

[Mocha](http://visionmedia.github.io/mocha/)
[Expect.js](https://github.com/LearnBoost/expect.js/)
[Sinon](http://sinonjs.org/docs/)