Как проверить 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 предотвращает его добавление во второй раз. Все это похоже на ошибку с плагином, но это позволило нам обойти это.

Другие вопросы по тегам