【问题标题】:Running AngularJS tests with maven使用 maven 运行 AngularJS 测试
【发布时间】:2013-10-14 19:22:56
【问题描述】:

您好,我是 AngularJS 和测试 JS 的新手。我需要用 Maven 运行我的测试。我为一个小应用程序创建了一个控制器和一个服务,它们正在工作。现在我想为我拥有的 JS 代码编写测试(是的,在开发时打破了编写测试的规则)。到目前为止,我已经设法使用 maven 调用测试。

我正在使用 jasmine-maven-plugin。

<plugin>
    <groupId>com.github.searls</groupId>
    <artifactId>jasmine-maven-plugin</artifactId>
    <version>1.3.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <jsSrcDir>src/main/webapp/js</jsSrcDir>
        <jsTestSrcDir>src/test/webapp/js</jsTestSrcDir>
        <specIncludes>
            <include>*Spec.js</include>
        </specIncludes>
    </configuration>
</plugin>

当运行 mvn test 我看到以下内容

[INFO] --- jasmine-maven-plugin:1.3.1.3:test (默认) @ pod-manager-web-ang --- 2013-10-14 14:57:34.322:INFO:oejs.Server:jetty-8.1.13.v20130916 2013-10-14 14:57:34.378:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:56475 [INFO] 执行 Jasmine Specs

然后是下面的消息失败

[ERROR] Caused by: net.sourceforge.htmlunit.corejs.javascript.EcmaError: ReferenceError: "angular" is not defined. (http://localhost:56475/src/controllers/controller.js#3)
[ERROR] at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3603)
[ERROR] at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3587)
[ERROR] at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.notFoundError(ScriptRuntime.java:3657)
[ERROR] at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.name(ScriptRuntime.java:1685)

问题是我应该将 angular.js 和其他 angular JS 文件放在哪里才能运行这些测试?

【问题讨论】:

    标签: javascript unit-testing maven angularjs


    【解决方案1】:

    使用 preloadSources 加载 Angular、jQuery 和其他需要的库。

    <configuration>
        <preloadSources>
            <source>${project.basedir}/src/main/webapp/vendor/jquery/1.10.2/jquery.js</source>
            <source>${project.basedir}/src/main/webapp/vendor/angular/1.0.5/angular.js</source>
        </preloadSources>
        <jsSrcDir>src/main/webapp/js</jsSrcDir>
        <jsTestSrcDir>src/test/webapp/js</jsTestSrcDir>
        <specIncludes>
            <include>*Spec.js</include>
        </specIncludes>
    </configuration>
    

    【讨论】:

    • 嗨 kseb,感谢您的回复,为什么我需要 jquery 文件,现在我的代码在没有它们的情况下工作正常。这是我运行单元测试所需要的吗?
    • 我需要 jQuery,因为 jqLit​​e 实现有限。我使用了更多来自 jQuery 的东西。所以对我来说,把它包括在内很重要。不过,您的需求可能会有所不同。
    • 使用 preloadSources 标签是我原来问题的正确选择。但我仍然无法让测试无头运行,我可以使用“mvn jasmine:bdd”命令运行它们。我没有包含 jquery,因为我不需要它们。
    • 查看plnkr.co/edit/naLJ3mD3UjoTqcF9nG8O 上的示例。有我的 pom.xml 工作版本与 jasmine 测试集成。测试在控制台中执行后触发:mvn clean install。我希望它有所帮助。
    • 我通过使用 PhantomJS 驱动程序 org.openqa.selenium.phantomjs.PhantomJSDriver 让它工作了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2023-03-09
    • 2012-01-15
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多