jasmine-maven-plugin + phantomJS : Error: [$injector:nomod]
jasmine-maven-plugin + phantomJS : Error: [$injector:nomod]
我创建了一个项目:
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:test 测试 运行 正常。
注意:我使用的是 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" 下创建了一个文件夹 "libs" 并放入其中:
- jquery-1.9.1.js
- angular.js
- angular-ui-router.js
- angular-resource.js
注意:angular 版本为 1.2.23
之后,我在 "src/main/javascript" 下创建了另一个文件夹 "app" 并放入其中:"app.module.js"
(function() {
'use strict';
angular.module('app', [
'app.Security.modules'
]);
})();
在 "src/main/javascript/app" 下,我创建了一个文件夹 "security" 并放入其中:"security.module.js"
(function() {
'use strict';
angular.module('app.Security.modules', []);
})();
和"cha_directive.js"
angular.module('app.Security.modules').directive('inputOld', InputAccessKeyManagement);
function InputAccessKeyManagement () {}
如果我用 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)
如果我只是重命名 "cha_directive.js" in "toto_directive.js"(具有相同的源代码)并且我运行 mvn jasmine:test 再次测试 运行 正常。
如果我使用 "cha_directive.js" 名称文件和 运行 mvn jasmine:bdd。在那之后我 运行 url http://localhost:8234 在 FF 中测试是 运行 正常。
唯一的事情(如果我用 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">
如果我在 class SpecRunnerExecutor.java 中查看 "checkForConsoleErrors" 中有一个测试:
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.");
}
}
注意:其他文件名会使测试崩溃: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”在“s[之前=32=]ecurity.module.js".
我使用 "customRunnerTemplate".
解决了这个问题
但也许还有另一种方法 "prettier" ?
如果其他人遇到此问题,一个好的解决方案是在您的 sourceInclude 块中执行类似的操作:
<sourceInclude>
<include>**/*.module.js</include>
<include>**/*.controller.js</include>
<include>**/*.service.js</include>
...
等等。假设您符合在一个名为 'example.module.js' 的文件中定义模块,那么模块将首先加载,然后是控制器,等等
我创建了一个项目:
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:test 测试 运行 正常。
注意:我使用的是 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" 下创建了一个文件夹 "libs" 并放入其中: - jquery-1.9.1.js - angular.js - angular-ui-router.js - angular-resource.js
注意:angular 版本为 1.2.23
之后,我在 "src/main/javascript" 下创建了另一个文件夹 "app" 并放入其中:"app.module.js"
(function() {
'use strict';
angular.module('app', [
'app.Security.modules'
]);
})();
在 "src/main/javascript/app" 下,我创建了一个文件夹 "security" 并放入其中:"security.module.js"
(function() {
'use strict';
angular.module('app.Security.modules', []);
})();
和"cha_directive.js"
angular.module('app.Security.modules').directive('inputOld', InputAccessKeyManagement);
function InputAccessKeyManagement () {}
如果我用 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)
如果我只是重命名 "cha_directive.js" in "toto_directive.js"(具有相同的源代码)并且我运行 mvn jasmine:test 再次测试 运行 正常。
如果我使用 "cha_directive.js" 名称文件和 运行 mvn jasmine:bdd。在那之后我 运行 url http://localhost:8234 在 FF 中测试是 运行 正常。
唯一的事情(如果我用 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">
如果我在 class SpecRunnerExecutor.java 中查看 "checkForConsoleErrors" 中有一个测试:
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.");
}
}
注意:其他文件名会使测试崩溃: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”在“s[之前=32=]ecurity.module.js".
我使用 "customRunnerTemplate".
解决了这个问题但也许还有另一种方法 "prettier" ?
如果其他人遇到此问题,一个好的解决方案是在您的 sourceInclude 块中执行类似的操作:
<sourceInclude>
<include>**/*.module.js</include>
<include>**/*.controller.js</include>
<include>**/*.service.js</include>
...
等等。假设您符合在一个名为 'example.module.js' 的文件中定义模块,那么模块将首先加载,然后是控制器,等等