gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:50:30 34 4
gpt4 key购买 nike

我是 maven 和 jasmine 的新手,我在设置 maven 以在 angular 应用程序上运行单元测试时遇到问题。我一加就出问题了angular-mocks.js 到 test/javascript/lib 文件夹。
mvn test抛出 htmlunit.ScriptException只需添加 angular-mocks 文件。如果我删除文件,它运行得很好(当然没有部分依赖于模拟,但它们作为单元测试失败而不是抛出错误)。

有谁知道可能导致此错误的原因以及如何解决?

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

Chrome 给出:

TypeError: Cannot find function attachEvent in object [object HTMLDocument]. (http://localhost:55408/src/lib/angular.js#1568)



FIREFOX_3_6 给出:

Exception invoking Node.removeEventListener() with arguments [String, NativeArray, Boolean]



INTERNET_EXPLORER_9 给出:

Exception invoking Node.detachEvent() with arguments [String, NativeArray]



堆栈跟踪(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 网站引用它都会给出相同的错误。

最佳答案

在 CHROME 浏览器版本中,当 angular 尝试加载 JQLite 时会发生错误,这是一个 jQuery 库的 api 兼容子集,允许 angular 操作 DOM。我能够通过下载未压缩版本的 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 文档指出“真正的 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 浏览器版本,因此无需指定浏览器版本。

关于unit-testing - angular-mock.js 与 htmlunit 冲突吗?如何在 maven-jasmine 中使用 angular-mock.js 测试 Angular 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17675261/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com