Выполнение модульных тестов JavaScript без сборки в сборке Continuous Integration - PullRequest
59 голосов
/ 15 января 2010

У меня есть план сборки веб-приложения, работающий в системе непрерывной интеграции ( Atlassian Bamboo 2.5). Мне нужно включить модульные тесты JavaScript на основе QUnit в план сборки, чтобы при каждой сборке выполнялись тесты Javascript и Bamboo интерпретировал результаты теста.

Желательно, чтобы я мог сделать процесс сборки «автономным», чтобы не требовалось никаких подключений к внешним серверам. Хорошие идеи о том, как этого добиться? Система CI, выполняющая процесс сборки, находится на сервере Ubuntu Linux.

Ответы [ 7 ]

55 голосов
/ 15 января 2010

Поскольку мне удалось придумать решение самостоятельно, я подумал, что было бы хорошей идеей поделиться им. Подход, возможно, не безупречен, но, похоже, он первый работает. Не стесняйтесь публиковать улучшения и предложения.

Что я сделал в двух словах:

  • Запустить экземпляр Xvfb , виртуальный кадровый буфер
  • Использование JsTestDriver :
    • запустить экземпляр Firefox в виртуальном фреймбуфере (без головы)
    • захватывает экземпляр Firefox и запускает набор тестов
    • генерирует JUnit-совместимые результаты теста .XML
  • Используйте Bamboo для проверки файла результатов, чтобы пройти или не выполнить сборку

Далее я перейду к более подробным этапам. Вот как выглядит моя структура каталогов:

lib/
    JsTestDriver.jar
test/
    qunit/
            equiv.js
            QUnitAdapter.js
    jsTestDriver.conf
    run_js_tests.sh
    tests.js
test-reports/
build.xml

На сервере сборки:

  • Установить Xvfb (apt-get install Xvfb)
  • Установить Firefox (apt-get install firefox)

В ваше приложение будет встроено:

server: http://localhost:4224

load:
# Load QUnit adapters (may be omitted if QUnit is not used)
  - qunit/equiv.js
  - qunit/QUnitAdapter.js   

# Tests themselves (you'll want to add more files)
  - tests.js

Создание файла сценария для запуска модульных тестов и генерации результатов тестов (пример в Bash, run_js_tests.sh):

* * 1068

Создайте цель Ant, которая вызывает скрипт:

<target name="test">        
    <exec executable="cmd" osfamily="windows">
        <!-- This might contain something different in a Windows environment -->
    </exec>

    <exec executable="/bin/bash" dir="test" osfamily="unix">
        <arg value="run_js_tests.sh" />
    </exec>
</target>   

Наконец, сообщите плану сборки Bamboo, чтобы он одновременно вызывал цель test и искал результаты теста JUnit. Здесь по умолчанию "**/test-reports/*.xml" подойдет.

4 голосов
/ 03 сентября 2010

Для всех, кто заинтересован в том, чтобы без особого труда запустить спецификации Jasmine BDD в maven, вам может быть интересен плагин jasmine-maven, который я поддерживаю:

http://github.com/searls/jasmine-maven-plugin

3 голосов
/ 29 марта 2013

За прошедший год я поиграл со многими решениями, но ничего не нашел в приблизительном значении Кармы (бывшего завсегдатая). Попробуйте 100 *

http://karma -runner.github.com /

3 голосов
/ 15 января 2010

В качестве альтернативы вы также можете попробовать TestSwarm. Я запустил его, используя QUnit для запуска моих JS-тестов.

0 голосов
/ 26 июля 2012

JS Test Runner - довольно хорошее решение. Он использует PhantomJS и QUnit.

0 голосов
/ 23 марта 2012

Я использовал maven и junit для вызова носорога. Это не элегантно, но я использую его для тестирования основных сервисов и служебного кода.

Для этого требуется использовать неподдерживаемые классы, такие как XHR с библиотеками Java.

Я обнаружил, что лучше всего кодировать все в javascript (тесты и т. Д.) И использовать только junit для организации сборки и подключения к CI.

Хотелось бы посмотреть, сможет ли JsTestDriver это сделать. Или мокко с юнитом репортером.

0 голосов
/ 15 января 2010

Вы можете использовать браузер без головы rhino для запуска модульных тестов на компьютере CI. Конечно, недостатком здесь является то, что он не находит ошибок, специфичных для браузера X ... но он лучше, чем установка 2-3 ОС на вашем CI-боксе, чтобы охватить все основные платформы ...

Но да, это отстой ... но это может сработать достаточно хорошо в сценарии CI.

...