Unit testing angular-mock.js与htmlunit冲突?如何在maven jasmine中使用angular-mock.js测试angular应用程序

Unit testing angular-mock.js与htmlunit冲突?如何在maven jasmine中使用angular-mock.js测试angular应用程序,unit-testing,angularjs,mocking,htmlunit,jasmine-maven-plugin,Unit Testing,Angularjs,Mocking,Htmlunit,Jasmine Maven Plugin,我是maven和jasmine的新手,在设置maven以在angular应用程序上运行单元测试时遇到问题。一旦我将angular mocks.js添加到test/javascript/lib文件夹,我就会遇到麻烦 mvn测试仅通过添加角度模拟文件即可抛出htmlunit.ScriptException。如果我删除该文件,它运行得很好(当然没有依赖于模拟的部分,但是它们作为单元测试失败,而不是抛出错误) 有人知道是什么导致了这个错误以及如何修复它吗 编辑 我强烈怀疑这是一个htmlunit问题,

我是maven和jasmine的新手,在设置maven以在angular应用程序上运行单元测试时遇到问题。一旦我将angular mocks.js添加到test/javascript/lib文件夹,我就会遇到麻烦

mvn测试
仅通过添加角度模拟文件即可抛出
htmlunit.ScriptException
。如果我删除该文件,它运行得很好(当然没有依赖于模拟的部分,但是它们作为单元测试失败,而不是抛出错误)

有人知道是什么导致了这个错误以及如何修复它吗


编辑
我强烈怀疑这是一个htmlunit问题,因为更改
时错误不同:

CHROME提供:

TypeError:在对象[object]中找不到函数attachEvent HTMLDocument]。(
http://localhost:55408/src/lib/angular.js#1568

FIREFOX_3_6提供:

使用参数[String]调用Node.removeEventListener()时发生异常, NativeArray,布尔值]

INTERNET_EXPLORER_9提供:

使用参数[String]调用Node.detachEvent()时发生异常, 国家阵列]


堆栈跟踪(摘录FF):

pom.xml(摘录):


com.github.searls
jasmine maven插件
1.3.1.2
lib/angular.js
http://code.angularjs.org/1.1.5/angular-mocks.js
测试

将angular-mocks.js添加到test/javascript/lib文件夹和直接从angularjs网站引用它都会产生相同的错误。

在CHROME浏览器版本中,当angular尝试加载JQLite一个允许angular操作DOM的jQuery库的api兼容子集时,会发生错误。我可以通过下载jQuery(v1.10.2)、angular(v1.0.7)和angular Mock(v1.0.7)的未压缩版本来解决这个问题。我在jasmine maven插件的配置中添加了以下内容

<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 test deps}/jQuery.js
${angular test deps}/angular.js
${angular test deps}/angular-mocks.js

angular文档指出,“如果在触发
DOMContentLoaded
事件之前加载,则真正的jQuery始终优先于jqLite”(uncompressed 1.0.7的第1448行)。此修复程序在CHROME浏览器版本中仍然失败,但可用于FIREFOX_3_6、FIREFOX_17、INTERNET_EXPLORER_9、INTERNET_EXPLORER_8和INTERNET_EXPLORER_7。jasmine maven插件默认为FIREFOX_3_6 borwser版本,因此无需指定浏览器版本。

使用Karma(而不是maven)可以很好地运行相同的测试,即使包括angle-mocks.js。所以问题几乎肯定是Maven或Jasmine插件的问题。这就成功了。这是一个比使用PhantomJs更好的解决方案,到目前为止我就是这么做的。我已经在项目中使用了JQuery,所以它甚至没有添加额外的依赖项。谢谢
<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>
<preloadSources>
  <preloadSource>${angular-test-deps}/jQuery.js</preloadSource>
  <preloadSource>${angular-test-deps}/angular.js</preloadSource>
  <preloadSource>${angular-test-deps}/angular-mocks.js</preloadSource>
</preloadSources>