0

私はプロジェクトを作成します:

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を使用しています

「ターゲット」ディレクトリに、「phantomjs.exe」を置くフォルダー「phantomjs-1.9.7-windows」を追加します。

元の 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

注:角度はバージョン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)

「toto_directive.js」の「cha_directive.js」の名前を変更して(同じソースコードを使用)、mvn jasmine:testを再度実行すると、テストは正常に実行されます。

「cha_directive.js」という名前のファイルを使用してmvn jasmine:bddを実行した場合。その後、FF で URL http://localhost:8234を実行すると、テストは正常に実行されます。

唯一のこと (「Jasmine Spec Runner」の HTML コードを fireBug で編集した場合) は、次のタグが表示されることです。

<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">

「checkForConsoleErrors」のクラス SpecRunnerExecutor.java を見ると、テストがあります。

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、...

4

2 に答える 2

1

インポートスクリプトの順番の問題です。

私は宣言する

(function() {
   'use strict';
   angular.module('app.Security.modules', []);
})();

「 s ecurity.module.js」という名前のファイルに

そして、私は自分の宣言を使用しようとします

angular.module('app.Security.modules')
  .directive('inputOld', InputAccessKeyManagement);
  function InputAccessKeyManagement () {}

「 c ha_directive.js」という名前のファイルに

カスタム インポート スクリプトの順序を指定しない場合、既定の順序はアルファベット順であり、" c ha_directive.js" は " s ecurity.module.js" の前になります。

「customRunnerTemplate」を使用して問題を解決しました。

しかし、「よりきれい」にする別の方法があったのではないでしょうか?

于 2015-03-02T08:08:00.170 に答える