Лучший способ интеграции maven / qunit / phantomjs?

Я искал лучший способ выполнить модульное тестирование JS в среде maven CI. В настоящее время я собрал в своем проекте maven следующее:

  • qunit resources (файлы JS / CSS)
  • qunit test html-файлы (по одному на каждый тестируемый файл) с приспособлением html, если требуется
  • index html файл, который ссылается на тестовые html-файлы как упорядоченный список гиперссылок
  • . Файл-исполнитель PhantomJS, который:
    • открывает индексный html-файл и анализирует список тестовых файлов
    • открывает каждый тестовый файл
    • делает снимок экрана с результатами теста qunit для каждого файла
    • Если есть какие-либо ошибки, выйдите со статусом «1»
    • Если ошибок нет, выйдите со статусом «0»
  • файл оболочки, который завершится с «0», если phantomjs не установлен, вызовет тесты phantomjs, если он установлен
  • изменяется в pom.xml для запуска тестов phantomjs на этапе тестирования сборки:

     
     <плагин>
      org.codehaus.mojo 
      exec-maven-plugin 
      1.1 
     <казни>
     <выполнение>
      Модульное тестирование PhantomJS 
      тест 
     <цели>
      exec 
     
     
     
     <конфигурация>
     <исполняемый> $ {project.basedir} / src / main / webapp / unittest / phantomcheck 
     <аргументы>
     <аргумент> $ {project.basedir} / src / main / webapp / unittest / qunit-runner.js 
      $ {project.basedir} /src/main/webapp/unittest/tests/index.html 
      $ {project.build.directory} / surefire-reports 
     
     
     
    
    

Итак, это прекрасно работает. Он запускает тесты qunit во время сборки на наших машинах для разработки и сборки (пока установлен PhantomJS). Тесты выполняются в автономной среде браузера без ограничений на тесты qunit. Другие интеграции maven / qunit, которые я видел, терпят неудачу из-за запуска тестов в Rhino или других средах JS, которые накладывают ограничения на типы тестов, которые мы можем писать. Кроме того, phantomjs дает нам возможность получать скриншоты тестовых запусков, которые помогают при устранении любых сбоев.

Недостатком моего подхода является то, что на машине сборки / разработки требуется установка PhantomJS. Я не знаю, как связать phantomJS в зависимости, чтобы разработчикам не нужно было беспокоиться об установке PhantomJS. Может ли кто-нибудь подтолкнуть меня в этом направлении? С чего начать?

16
задан Matt 15 December 2011 в 19:10
поделиться