【问题标题】:How to test jQuery UI Dialog during headless execution如何在无头执行期间测试 jQuery UI 对话框
【发布时间】:2013-02-05 17:32:32
【问题描述】:

我们的应用使用jQuery dialogs 来显示模式弹出窗口。我们正在尝试为我们的 javascript 编写一些单元测试,其中一部分是创建对话框。我们正在使用 Jasmine 和 Jasmine Maven plugin。在浏览器中运行测试时,一切正常。但是,当我们尝试无头执行测试 (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>

我们可以做些什么来让无头执行与对话内容一起工作?

【问题讨论】:

    标签: javascript unit-testing jquery-ui-dialog jasmine jasmine-maven-plugin


    【解决方案1】:

    我们找出了问题所在。基本上,我们的 src 目录中的 preloadSources 被添加了两次到规范运行器中。它将首先完成所有preoloadSources,然后添加 src 目录中的所有内容。所以,jquery.js 在第二次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 阻止它第二次被添加。这一切似乎都是插件的一个错误,但这让我们能够绕过它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多