Тестеры для AngularJS - как запустить тесты с Eclipse IDE и CI-сервера без особых сложностей?

Я пытаюсь выяснить простой способ запуска тестов в приложении angularjs. Я новичок в мире тестирования, поэтому немного сложно понять все варианты и разницу между ними.

Моя цель: иметь возможность запускать тесты просто из моей среды IDE - Eclipse. И для проверки кода на браузере Google Chrome.

Я обнаружил, что жасмин является очевидным выбором для написания модульных тестов js. Проблема заключается в выборе бегуна как для тестов жасмина, так и для тестов e2e.

Попытка сохранить это просто, я придумал следующую идею для настройки: Напишите модульные тесты в жасмине и тесты e2e в phantomjs и syn.js. Затем настройте eclipse для запуска phantomjs в качестве внешнего инструмента, так что выход перейдет на консоль в eclipse.

Я также планирую иметь работу CI в Jenkins, и, насколько мне известно, Jenkins также может запускать phantom, поэтому теоретически это решение будет работать одинаково для CI.

В качестве альтернативы существуют тестовые инструменты, такие как Karma и Protractor. С одной стороны, им, по-видимому, рекомендуется, но, с другой стороны, они кажутся мне в некоторых случаях излишними. Для работы требуется много разных инструментов/сервисов/процессов, и кажется, что боль поддерживает все эти настройки, если они ломаются.

В моем понимании: protractor работает на webdriverjs, который работает на nodejs, и он требует, чтобы сервер селена работал в фоновом режиме, и, кроме всего прочего, селен открывает реальные окна браузера, которые кажутся немного бессмысленными, а не безголовыми проверка браузера.

Тогда есть Карма, что я еще не полностью понял, что она должна делать. Из того, что я прочитал, он контролирует файлы в моем проекте и всякий раз, когда файл изменяется, он запускает тесты. Я не уверен, как он проходит тесты - это также использование селена?

И, наконец, есть хрюканье и йомен, которые я совсем не понимаю, что они делают и как они взаимодействуют или согласуются с другими инструментами, которые я перечислял.

Я был бы признателен, если бы кто-нибудь мог прояснить, что делают эти различные инструменты, и как они сочетаются друг с другом. Кроме того, как они будут соответствовать Jenkins в качестве сервера CI?

Также, если вы могли бы прокомментировать мою "более простую настройку" - это имеет смысл? Я что-то пропустил?

Ответ 1

Карма предназначена для тестирования вашего JS независимо от того, использует ли он Angular или нет. Внутри и вне модульного тестирования с помощью Karma здесь очень хорошо освещены: http://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-karma.html. Да, Karma открывает и закрывает окна браузера по мере необходимости и указывается в файле конфигурации. Если вы не хотите открывать окна браузера, вы можете использовать PhantomJS. Вы можете запускать Karma из большинства IDE, способных запускать внешний script, или запускать его через командную строку.

Транспортир предназначен для сквозного (или E2E) тестирования вашего проекта в целом. Он откроет окно браузера и щелкнет страницы, как если бы он был пользователем, введя данные, где вы рассказываете об этом, и ищете указанные результаты. Транспортир немного сложнее, чем просто писать какой-то жасмин, но результаты его стоят. Как и Карма, вы можете запустить Protractor из большинства IDE, которые могут запускать внешние скрипты или через командную строку.

Yeoman - это система управления процессами, которая включает управление зависимостями через Bower, автоматизацию задач через Grunt и управление проектами через Yo. Он будет запускать ваши тесты в Карме и Транспортире, минимизировать ваши JS, CSS и HTML, скомпилировать все в соответствующие файлы (внутренние JS, внешние библиотеки и CSS) и предоставить вам полный пакет, который можно развернуть. Красота Йоменна заключается в том, что она не специфична ни для одной IDE. Все, что он делает, может быть выполнено с помощью сценариев в вашей среде IDE или через командную строку.

Теперь, сказав все это о Йомене, вам все равно придется писать тесты (они не будут волшебно придумать их для вас) и научиться интегрировать его в свою программу разработки, но это определенно способ для разработки JS. Eclipse отлично подходит для разработки JS, но вы получите лучшую производительность и простоту использования (IMHO) из WebStorm.

Что касается того, как все они вписываются в CI, такие как Jenkins, я считаю, что результаты теста Karma и Protractor в формате, который Jenkins может читать и отображать. С возможностями сценариев в Jenkins вы можете настроить его для запуска процесса сборки каждый раз, когда ваш репозиторий управления версиями (вы используете какой-то элемент управления источником, не так ли?) И показываете эти результаты на странице Jenkins. У моего офиса очень похожая настройка, и мы используем ее ежедневно. Я не тот парень, который должен выполнить конфигурацию Дженкинса, но я регулярно работаю с Yeoman (и, следовательно, с Кармой и Транспортером) через WebStorm, и имел очень хорошие результаты.

Ответ 2

Я бы сказал, что здесь явный выбор - Карма и Транспортер. Хотя это правда, что они полагаются на кучу других вещей, они делают это довольно антисептически: транспортир запускает сервер селена, а затем отключает его, когда это делается. Как только вы установили node, другие установки очень просты. Я также установил httpster, который будет обслуживать вашего публичного директора на порте 3333.

Откровенно говоря, пришедший из десятилетия TDD в мире Java, когда я впервые посмотрел на Javascript несколько лет назад (снова), тестовое изображение было полной шуткой. Но теперь я думаю, что сочетание Кармы и Транспортатора довольно фантастично. В IntelliJ вы можете запускать тесты Karma, и они глупы, и результаты представлены в бегуне, который так же хорошо, как и все, что я видел в мире Java (Xcode 5 имеет лучшую интеграцию тестов). Вы также можете установить плагин ddescribe в IntelliJ и иметь ui для выполнения отдельных тестов или исключая тесты.

На стороне транспортира я нашел этот пост, потому что сейчас я нахожусь в точке, где я буду запускать свою карму, транспортир, а затем тесты JUnit на сервере непрерывной интеграции (либо Jenkins, либо TeamCity). Я был немного удивлен нехваткой информации об этой ноге поездки, но ясное направление, которое я вижу там, это Grunt, потому что он будет запускать ваши тесты транспортира, затем генерирует выход JUnit в стиле Дженкинс. Grunt также является довольно впечатляющим дополнением к миру JS.

Я знаю, что это звучит как куча мнений, но я думаю, что, как это произошло в мире Java, мир Javascript достиг такого уровня зрелости, когда вам просто нужно ожидать, что что-то перетаскивает другие вещи их. Честно говоря, выглядит как node и npm делают довольно приятную работу по созданию этой довольно бесшовной (по сравнению с десятилетием спуска на Maven в мире Java).

Ответ 3

Обновлено: Извините, я не правильно прочитал ваш вопрос.

Карма - это тест-бегун, который лучше всего подходит для жасмина. Для настройки очень просто. Загрузите node и установите npm install karma. Следуйте за проектом angular seed sandbox, который содержит всю базовую конфигурацию, настроенную для модульного тестирования и сквозного тестирования (в папке конфигурации). Все, что вам нужно, - это plugen-модуль nodejs, установленный в eclipse

Йомен может использоваться для миниатюризации javascript, компиляции sass e.t.c.

Ответ 4

Установите node eclipse, и вы можете установить все в eclipse. http://www.nodeclipse.org/