2012-03-28 6 views
4

Ich verwende require-js, um Abhängigkeiten in meinem Java-Script-Projekt zu modellieren. Ich benutze Jasmine, um BDD-formatierte Testfälle zu schreiben und das Jasmine-Maven-Plugin: 1.1.0, um diese Tests im Headless-Modus auszuführen.jasmine-maven-plugin und require-js führen zu Pfadproblemen

Dies ist meine Quelle Projektstruktur

project/ 
| src/main/javascript 
| | api/*.js 
| | main.js 
| src/test/javascript 
| | spec/*spec.js 

Das ist mein Webapp pom Jasmin Konfiguration:

<plugin> 
    <groupId>com.github.searls</groupId> 
    <artifactId>jasmine-maven-plugin</artifactId> 
    <version>1.1.0</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>generateManualRunner</goal> 
       <goal>resources</goal> 
       <goal>testResources</goal> 
       <goal>test</goal> 
       <goal>preparePackage</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <specRunnerTemplate>REQUIRE_JS</specRunnerTemplate> 
     <scriptLoaderPath>lib/require-jquery.js</scriptLoaderPath> 
     <sourceIncludes> 
      <include>lib/require-jquery.js</include> 
      <include>lib/underscore.js</include> 
      <include>lib/backbone.js</include> 
      <include>lib/d3.js</include> 
      <include>lib/d3.layout.js</include> 
      <include>lib/bootstrap.js</include> 
      <include>main.js</include> 
     </sourceIncludes> 
     <preloadSources> 
      <source>lib/require-jquery.js</source> 
      <source>lib/underscore.js</source> 
      <source>lib/backbone.js</source> 
      <source>lib/d3.js</source> 
      <source>lib/d3.layout.js</source> 
      <source>lib/bootstrap.js</source> 
      <source>main.js</source> 
     </preloadSources> 
     <browserVersion>FIREFOX_3_6</browserVersion> 
    </configuration> 
</plugin> 

Während der Maven alle js bauen Quellen kopiert/Jasmin/src Ziel. Die runner.html, die sich auf meine main.js bezieht, ist auf target/jasmine.

Nun ist das Problem, dass meine Require-Js-Module ihre Abhängigkeiten relativ zu der main.js definieren, während der Runner im maven-Testlauf davon ausgeht, dass sie relativ zu target/jasmine/runner.html sind. Da meine Module den zusätzlichen jasmine/src-Ordner nicht kennen (und nicht wissen müssen), ist das IMHO ein Problem.

ich die folgende Fehlermeldung, wenn ich mvn sauber laufen zu installieren:

fehlgeschlagen Ziel com.github.searls auszuführen: Jasmin-Maven-Plugin: 1.1.0: Test (default) auf Projekt MyWebApp: Die Jasmin-maven-Plugin stellte eine Ausnahme: java.lang.RuntimeException: org.openqa.selenium.WebDriverException: com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: Wrapped java.lang.RuntimeException: java.io.FileNotFoundException: C: \ Jenkins \ Jobs \ job1 \ Arbeitsplatz \ MyWebApp \ target \ Jasmin \ api \ data-util.js (Das System kann den angegebenen Pfad nicht finden können)

jemand da draußen einige Ahnung, um zu arbeiten, oder dass konfigurieren?

Antwort

3

stand ich vor dem gleichen Problem: java.io.FileNotFoundException

mit requireJS und Jasmin

aber Sie haben nicht die Maven-Ressourcen-Plugin verwenden müssen und die js Dateien zu einem Hack zweites Ausgabeverzeichnis

habe ich 'srcDirectoryName'

Sie alle möglichen params bei https://github.com/searls/jasmine-maven-plugin/blob/master/src/main/java/com/github/searls/jasmine/mojo/AbstractJasmineMojo.java

und erweiterte Beispiele unter https://github.com/searls/jasmine-maven-plugin/tree/master/src/test/resources/examples finden

1

In der Zwischenzeit fand ich eine Abhilfe oder ein Fix (nicht sicher) durch die Konfiguration der Maven-Ressourcen-Plugin

<plugin> 
<artifactId>maven-resources-plugin</artifactId> 
<executions> 
    <execution> 
     <id>copy-js-files</id> 
     <phase>generate-test-resources</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${project.build.directory}/jasmine</outputDirectory> 
      <resources> 
       <resource> 
        <directory>src/main/javascript</directory> 
        <filtering>false</filtering> 
       </resource> 
       <resource> 
        <directory>src/main/webapp</directory> 
        <filtering>false</filtering> 
       </resource> 
       <resource> 
        <directory>src/test/webapp</directory> 
        <filtering>false</filtering> 
       </resource> 
      </resources> 
     </configuration> 
    </execution> 
</executions> 

ich, dass die Konfiguration in einem separaten Profil setzen, die ich während des Tests aktiviere .

0

Ich sehe, dass Sie lib/require-jquery.js haben, aber Ihre Dateibaum zeigt nicht, wo "lib" befindet. ist relativ geladen, aber Sie haben keine. Vielleicht ist das dein Problem. Ich schrieb einen kurzen Post, der meine Erfahrungen mit dem Jasmine-Maven-Plugin zusammenfasste und Require.js verwendete. Darin habe ich meine pom.xml. Meine pom.xml scheint ein bisschen kleiner als deine, aber das Plugin funktioniert gut für mich. Vielleicht hilft mein Beitrag. Jasmine+Maven+Requirejs+Coverage