Как проверить JQuery UI Dialog во время безголового выполнения
Наше приложение использует диалоги jQuery для модальных всплывающих окон. Мы пытаемся написать несколько модульных тестов для нашего javascript, и частью этого является создание диалогов. Мы используем Jasmine и плагин Jasmine Maven. При запуске тестов в браузере все работает нормально. Тем не менее, когда мы пытаемся запустить безголовое выполнение тестов (mvn jasmine:test
), тесты не выполняются в строках, создающих диалог. Там ошибка выглядит примерно так:
* TypeError: Cannot find function dialog in object [object Object].
Строка, на которой это происходит, просто так:
$(element).dialog(popupProperties);
Если это поможет, наш pom.xml имеет это для плагина:
<plugin>
<groupId>com.github.searls</groupId>
<artifactId>jasmine-maven-plugin</artifactId>
<version>1.2.0.0</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
<configuration>
<preloadSources>
<source>${project.basedir}/src/main/webapp/resources/jquery.js</source>
<source>${project.basedir}/src/main/webapp/resources/jquery-ui.js</source>
<source>${project.basedir}/src/main/webapp/resources/angular.js</source>
<source>${project.basedir}/src/test/javascript/lib/angular-mocks.js</source>
<source>${project.basedir}/src/test/javascript/lib/jasmine-fixture.js</source>
</preloadSources>
<jsSrcDir>${project.basedir}/src/main/webapp/resources/</jsSrcDir>
<jsTestSrcDir>${project.basedir}/src/test/javascript/unit/</jsTestSrcDir>
</configuration>
</plugin>
Есть ли что-то, что мы можем сделать, чтобы заставить безголовое исполнение работать с диалогами?
1 ответ
Мы выяснили, в чем проблема. В основном preloadSources
из нашего каталога src добавлялись дважды в специалиста. Это сделало бы все preoloadSources
сначала, а затем добавьте все из каталога src. Так, jquery.js
добавили 2-й раз под 2-й jquery-ui.js
и, таким образом, он не знал, что dialog
было. Мы исправили это, изменив наш pom.xml следующим образом:
<plugin>
<groupId>com.github.searls</groupId>
<artifactId>jasmine-maven-plugin</artifactId>
<version>1.2.0.0</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
<configuration>
<preloadSources>
<source>${project.basedir}/src/main/webapp/resources/${ivplugin.client.version}/jquery.js</source>
<source>${project.basedir}/src/main/webapp/resources/${ivplugin.client.version}/jquery-ui.js</source>
<source>${project.basedir}/src/main/webapp/resources/${ivplugin.client.version}/angular.js</source>
<source>${project.basedir}/src/test/javascript/lib/angular-mocks.js</source>
<source>${project.basedir}/src/test/javascript/lib/jasmine-fixture.js</source>
</preloadSources>
<jsSrcDir>${project.basedir}/src/main/webapp/resources/${ivplugin.client.version}/</jsSrcDir>
<jsTestSrcDir>${project.basedir}/src/test/javascript/unit/</jsTestSrcDir>
<sourceExcludes>
<exclude>**/jquery.js</exclude>
<exclude>**/jquery-ui.js</exclude>
<exclude>**/angular.js</exclude>
</sourceExcludes>
</configuration>
</plugin>
sourceExcludes
предотвращает его добавление во второй раз. Все это похоже на ошибку с плагином, но это позволило нам обойти это.