2014-04-03 9 views
6

Ich habe ein Projekt, in dem Intern Unit-Tests in einem anderen Verzeichnisbaum als der getestete Quellcode sein sollen. Etwa wie folgen aus:Laden von Abhängigkeiten außerhalb des Intern-Verzeichnisses beim Ausführen von Tests über Selenium

projectRoot 
projectRoot/src 
projectRoot/tests 
projectRoot/tests/intern.js 
projectRoot/tests/node_modules/intern 
projectRoot/tests/MyTestSuite.js 

im internen Konfigurationsdatei definiere ich ein AMD-Paket, den relativen Pfad mit ../ verwendet src von der Einheitstestreihe zu erreichen. Hier ist ein Beispiel-Konfiguration:

define({ 
    environments: [ { browserName: 'chrome', platform: 'WINDOWS' }], 
    webdriver: { host: 'localhost', port: 4444 }, 
    useSauceConnect: false, 
    loader: { 
    packages: [ 
      { name: 'testSuites', location: '.' }, 
      { name: 'externalDep', location: '../src' } 
     ] 
    }, 
    suites: [ 'testSuites/MyTestSuite' ] 
}); 

und eine passende Einheit Testsuite

define([ "intern!tdd", "intern/chai!assert","externalDep/ExternalDep"], 
    function(tdd, assert, ExternalDep) { 
    tdd.suite("Suite that has external dependency", function() { 
     tdd.test("Test if external dependency is loaded correctly", function() { 
     assert(ExternalDep === "hello"); 
     }); 
    }); 
    } 
); 

Dies funktioniert gut, wenn sie direkt im Browser (client.html) getestet oder Knoten (Client.js). Wenn sie jedoch über Selenium Server (mit runner.js) abgefeuert wird, kann die client.html, die im von Selenium gestarteten Browser ausgeführt wird, die externen Abhängigkeiten nicht finden. Im obigen Beispiel wird versucht, ExternalDep unter http://localhost:9000/__intern/src/ExternalDep.js anzufordern, was ein 404 ist, da das Verzeichnis src nicht intern ist.

Ich nehme an, wenn ich intern.js auf dem höchsten gemeinsamen Super-Verzeichnis der Tests und des Quellcodes setzen würde, würde es funktionieren. Aber unser Projekt ist derzeit so angelegt, dass es unpraktisch ist. Gibt es eine Möglichkeit, Quellen zu konfigurieren, die über den Speicherort der internen Konfigurationsdatei hinausgehen, oder habe ich nur einen dummen Fehler gemacht?

Danke!

+0

Ich könnte das gleiche Problem haben; Eröffnet ein Problem hier: https://github.com/theintern/intern/issues/204 – ben

Antwort

1

Es ist kein Problem, die Tests in ein anderes Verzeichnis als den Rest des Codes zu stellen, aber projectRoot muss das Arbeitsverzeichnis sein, von dem Sie den Runner starten, und Sie müssen Ihre Loader-Konfiguration ändern.

Anstatt also gerade jetzt, wo Sie Intern aus projectRoot/tests wie dieser Start sind:

…/projectRoot/tests$ ./.bin/intern-runner config=intern 

müssen Sie es von projectRoot starten:

…/projectRoot$ ./tests/.bin/intern-runner config=tests/intern 

... und Loader-Konfiguration ändern:

loader: { 
    packages: [ 
      { name: 'testSuites', location: 'tests' }, 
      { name: 'externalDep', location: 'src' } 
     ] 
    },