Unit testing angular-mock.js与htmlunit冲突?如何在maven jasmine中使用angular-mock.js测试angular应用程序
我是maven和jasmine的新手,在设置maven以在angular应用程序上运行单元测试时遇到问题。一旦我将angular mocks.js添加到test/javascript/lib文件夹,我就会遇到麻烦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问题,
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>