Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs jasmine maven插件+;phantomJS:错误:[$injector:nomod]_Angularjs_Maven_Phantomjs_Jasmine Maven Plugin - Fatal编程技术网

Angularjs jasmine maven插件+;phantomJS:错误:[$injector:nomod]

Angularjs jasmine maven插件+;phantomJS:错误:[$injector:nomod],angularjs,maven,phantomjs,jasmine-maven-plugin,Angularjs,Maven,Phantomjs,Jasmine Maven Plugin,我创建了一个具有以下内容的项目: mvn archetype:generate -DarchetypeGroupId=com.github.searls -DarchetypeArtifactId=jasmine-archetype -DarchetypeVersion=1.3.1.5 -DgroupId=com.acme -DartifactId=my-jasmine-project -Dversion=0.0.1-SNAPSHOT 第一次使用mvn jasmine进行测试:测试正常运行 注

我创建了一个具有以下内容的项目:

mvn archetype:generate -DarchetypeGroupId=com.github.searls -DarchetypeArtifactId=jasmine-archetype -DarchetypeVersion=1.3.1.5 -DgroupId=com.acme -DartifactId=my-jasmine-project -Dversion=0.0.1-SNAPSHOT
第一次使用mvn jasmine进行测试:测试正常运行

注意:我使用maven 3.2.1

在“target”目录中,我添加了一个文件夹“phantomjs-1.9.7-windows”,其中我放置了“phantomjs.exe”

我修改了原始pom.xml以添加

                ...
    <configuration>
        <srcDirectoryName>${project.artifactId}/src/main/javascript</srcDirectoryName>
        <webDriverClassName>org.openqa.selenium.phantomjs.PhantomJSDriver</webDriverClassName>
        <webDriverCapabilities>
            <capability>
                <name>phantomjs.binary.path</name>
                <value>${project.build.directory}/phantomjs-1.9.7-${os.phantomJS}/${run.phantomJS}</value>
            </capability>
        </webDriverCapabilities>


        <preloadSources>
            <source>${project.basedir}/src/main/javascript/libs/jquery-1.9.1.js</source>
            <source>${project.basedir}/src/main/javascript/libs/angular.js</source>
            <source>${project.basedir}/src/main/javascript/libs/angular-ui-router.js</source>
            <source>${project.basedir}/src/main/javascript/libs/angular-resource.js</source>
        </preloadSources>
    </configuration>
    ...
在“src/main/javascript/app”下,我创建了一个文件夹“security”,并在其中输入:“security.module.js”

和“cha_directive.js”

如果我使用mvn jasmine:test进行测试,我会得到一个错误:

[ERROR - 2015-02-26T08:12:49.751Z] Session [40eacc20-bd8f-11e4-a736-9934c466a5ff] - page.onError - stack:
  (anonymous function) (http://localhost:51170/jasmine-project/src/main/javascript/libs/angular.js:1679)
  ensure (http://localhost:51170/jasmine-project/src/main/javascript/libs/angular.js:1601)
  module (http://localhost:51170/jasmine-project/src/main/javascript/libs/angular.js:1892)
  (anonymous function) (http://localhost:51170/jasmine-project/src/main/javascript/app/security/cha_directive.js:1)
[WARNING] JavaScript Console Errors:

  * Error: [$injector:nomod] Module 'app.Security.modules' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
http://errors.angularjs.org/1.2.23/$injector/nomod?p0=app.Security.modules


[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.163s
[INFO] Finished at: Thu Feb 26 09:12:49 CET 2015
[INFO] Final Memory: 12M/210M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.searls:jasmine-maven-plugin:1.3.1.5:test (default-cli) on project jasmine-project: The jasmine-maven-plugin encountered an exception:
[ERROR] java.lang.RuntimeException: java.lang.RuntimeException: There were javascript console errors.
[ERROR] at com.github.searls.jasmine.runner.SpecRunnerExecutor.execute(SpecRunnerExecutor.java:46)
[ERROR] at com.github.searls.jasmine.mojo.TestMojo.executeSpecs(TestMojo.java:86)
如果我只是在“toto_directive.js”(使用相同的源代码)中重命名“cha_directive.js”,然后再次运行mvn jasmine:test,测试将正常运行

如果我使用“cha_directive.js”命名文件并运行mvn jasmine:bdd
。之后,我在FF中运行url,测试正常运行

唯一的一件事(如果我用fireBug编辑“Jasmine Spec Runner”的HTML代码)是我可以看到这个标签:

<head jmp_jserror="Error: [$injector:nomod] Module 'app.Security.modules' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. http://errors.angularjs.org/1.2.23/$injector/nomod?p0=app.Security.modules">

注意:其他文件名使测试崩溃:input_directive.js、accessKey_directive.js、…

这是导入脚本顺序的问题

我宣布

(function() {
   'use strict';
   angular.module('app.Security.modules', []);
})();
在名为“security.module.js”的文件中

我试着用我的声明

angular.module('app.Security.modules')
  .directive('inputOld', InputAccessKeyManagement);
  function InputAccessKeyManagement () {}
在名为“cha_directive.js”的文件中

如果未指定自定义导入脚本顺序,默认顺序为字母顺序,则“cha_directive.js”位于“security.module.js”之前

我使用“customRunnerTemplate”解决了这个问题


但也许还有另一种方法可以做到“更漂亮”?

如果其他人遇到这种情况,一个好的解决方案是在sourceInclude块中执行类似的操作:

<sourceInclude>
  <include>**/*.module.js</include>
  <include>**/*.controller.js</include>
  <include>**/*.service.js</include>
...

**/*.module.js
**/*.controller.js
**/*.service.js
...
等等。假设您同意在一个名为“example.module.js”的文件中定义模块,那么将首先加载模块,然后加载控制器,等等

WebElement head = driver.findElement(By.tagName("head"));
if (head != null) {
    String jserrors = head.getAttribute("jmp_jserror");
    if (StringUtils.isNotBlank(jserrors)) {
        throw new RuntimeException("There were javascript console errors.");
    }
}
(function() {
   'use strict';
   angular.module('app.Security.modules', []);
})();
angular.module('app.Security.modules')
  .directive('inputOld', InputAccessKeyManagement);
  function InputAccessKeyManagement () {}
<sourceInclude>
  <include>**/*.module.js</include>
  <include>**/*.controller.js</include>
  <include>**/*.service.js</include>
...