5

私はmavenとjasmineが初めてで、角度のあるアプリケーションで単体テストを実行するためのmavenの設定に問題があります。angular-mocks.jsを test/javascript/lib フォルダーに追加するとすぐに問題が発生します。

mvn testhtmlunit.ScriptExceptionangular-mocks ファイルを追加するだけでスローします。ファイルを削除すると、問題なく実行されます (もちろん、モックに依存する部分はありませんが、エラーをスローするのではなく、単体テストとして失敗します)。

このエラーの原因と修正方法を知っている人はいますか?


EDITを変更するとエラーが異なるため、
これはhtmlunit<browserVersion>の問題であると強く思います。

クロムは以下を提供します:

TypeError: オブジェクト [オブジェクト HTMLDocument] に関数 attachEvent が見つかりません。( http://localhost:55408/src/lib/angular.js#1568)

FIREFOX_3_6 は以下を与えます:

引数 [String, NativeArray, Boolean] を指定して Node.removeEventListener() を呼び出す例外

INTERNET_EXPLORER_9 では次のようになります。

引数 [String, NativeArray] を指定して Node.detachEvent() を呼び出す例外


スタック トレース (抜粋 FF):

[ERROR] Failed to execute goal com.github.searls:jasmine-maven-plugin:1.3.1.2:test (default) on project my-jasmine-project: The jasmine-maven-plugin encountered an exception:
[ERROR] java.lang.RuntimeException: org.openqa.selenium.WebDriverException: com.gargoylesoftware.htmlunit.ScriptException: Exception invoking Node.removeEventListener() with arguments [String, NativeArray, Boolean]
[ERROR] Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28'
[ERROR] System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.4', java.version: '1.6.0_51'
[ERROR] Driver info: driver.version: HtmlUnitDriver
[ERROR] at com.github.searls.jasmine.runner.SpecRunnerExecutor.execute(SpecRunnerExecutor.java:39)
...

pom.xml (抜粋):

<plugin>
  <groupId>com.github.searls</groupId>
  <artifactId>jasmine-maven-plugin</artifactId>
  <version>1.3.1.2</version>
  <configuration>
    <preloadSources>
      <source>lib/angular.js</source>
      <!-- <source>lib/angular-mocks.js</source> -->
      <source>http://code.angularjs.org/1.1.5/angular-mocks.js</source>
    </preloadSources>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>test</goal>
      </goals>
    </execution>
  </executions>
</plugin>

angular-mocks.js を test/javascript/lib フォルダーに追加しても、angularjs Web サイトから直接参照しても、同じエラーが発生します。

4

1 に答える 1

8

CHROME ブラウザ バージョンでは、Angular が DOM を操作できるようにする jQuery ライブラリの API 互換サブセットを angular が JQLite にロードしようとすると、エラーが発生します。jQuery (v1.10.2)、angular (v1.0.7)、および angular-mocks (v1.0.7) の圧縮されていないバージョンをダウンロードすることで、この問題を修正できました。jasmine-maven-plugin の設定に以下を追加しました。

<preloadSources>
  <preloadSource>${angular-test-deps}/jQuery.js</preloadSource>
  <preloadSource>${angular-test-deps}/angular.js</preloadSource>
  <preloadSource>${angular-test-deps}/angular-mocks.js</preloadSource>
</preloadSources>

angularドキュメントには、「イベントが発生する前にロードされていれば、Real jQueryは常にjqLit​​eよりも優先される」と記載されていますDOMContentLoaded(非圧縮1.0.7の1448行目)。この修正は、CHROME ブラウザー バージョンでは引き続き失敗しますが、FIREFOX_3_6、FIREFOX_17、INTERNET_EXPLORER_9、INTERNET_EXPLORER_8、および INTERNET_EXPLORER_7 では機能します。jasmine-maven-plugin はデフォルトで FIREFOX_3_6 ブラウザ バージョンに設定されるため、ブラウザ バージョンを指定する必要はありません。

于 2013-07-27T14:05:03.700 に答える