Я изучаю лучший способ проведения JS-тестирования в нашей среде CIF Maven. То, что я в настоящее время вымотано вместе, следующее в моем проекте maven:
- ресурсы qunit (файлы JS/CSS)
- Файлы qunit test html (по одному для каждого тестируемого файла) с помощью html fixture, если требуется
- index html файл, который ссылается на тестовые html файлы как упорядоченный список гиперссылок
- Файл бегущей строки PhantomJS, который:
- открывает файл индекса html и анализирует список тестовых файлов
- открывает каждый тестовый файл
- отображает скриншот результатов теста qunit для каждого файла
- Если есть какие-либо сбои, выйдите со статусом "1"
- Если нет сбоев, выйдите со статусом "0"
- файл оболочки, который выйдет с "0", если phantomjs не установлен, вызовет тесты phantomjs, если он установлен.
-
изменяется на pom.xml для запуска тестов phantomjs во время тестовой фазы сборки:
<plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <id>PhantomJS Unit Testing</id> <phase>test</phase> <goals> <goal>exec</goal> </goals> </execution> </executions> <configuration> <executable>${project.basedir}/src/main/webapp/unittest/phantomcheck</executable> <arguments> <argument>${project.basedir}/src/main/webapp/unittest/qunit-runner.js</argument> <argument>${project.basedir}/src/main/webapp/unittest/tests/index.html</argument> <argument>${project.build.directory}/surefire-reports</argument> </arguments> </configuration> </plugin> </plugins>
Итак, это работает хорошо. Он запускает тесты qunit во время сборки на наших dev и build машинах (пока установлен PhantomJS). Тесты выполняются в безгласной среде браузера без ограничений на тесты qunit. Другая интеграция maven/qunit, которую я видел, ослабевает из-за запуска тестов в Rhino или других средах JS, которые ограничивают тип тестов, которые мы можем написать. Плюс phantomjs дает нам возможность иметь скриншоты тестовых прогонов, которые полезны при устранении любых сбоев.
Недостатком моего подхода является то, что на машине build/dev требуется установка PhantomJS. Я не знаю, как связать phantomJS с зависимостью, чтобы разработчикам не нужно было беспокоиться об установке PhantomJS. Может ли кто-нибудь дать мне толчок в этом направлении? Как мне начать?