3

私たちのアプリは、モーダル ポップアップにjQuery ダイアログを使用します。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>

ダイアログでヘッドレス実行を機能させるためにできることはありますか?

4

1 に答える 1

1

問題が何であるかを理解しました。基本的に、preloadSourcessrc ディレクトリからの が spec runner に 2 回追加されていました。最初にすべてを実行し、preoloadSources次に src ディレクトリからすべてを追加します。そのためjquery.js、 2nd の下に 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により、2 回目に追加されるのを防ぎます。これはすべてプラグインのバグのように思えますが、これで回避できました。

于 2013-02-25T17:17:12.710 に答える