2015-11-03 12 views
16

Die Antwort auf this question beantwortet meine Frage nicht.Laden von Abhängigkeiten außerhalb des Projektverzeichnisses im Intern

Ich möchte Abhängigkeiten von außerhalb meines Projektstamms laden, indem ich den Intern als mein Testframework benutze. Ich arbeite zur Zeit mit folgenden Verzeichnisstruktur:

www/ 
    project1/ 
     app/ 
     lib/ 
    project2/ 
     app/ 
     lib/ 
    intern-tests/ 
     node_modules/ 
     tests/ 
      functional/ 
       project1-tests/ 
       project2-tests/ 
      unit/ 
       project1-tests/ 
       project2-tests/ 
      intern.js 
     Gruntfile.js 

Wie Sie sehen können, ist ich intern-tests sein eigenes Projekt zu machen und will dieses Verzeichnis alle meine Tests für all meine Projekte zu halten. Ich habe meine Gruntfile bereits eingerichtet, um Tests mit der grunt exec-Bibliothek auszuführen, die den grunt projectName-Befehl in grunt test --project=projectName konvertiert. All das funktioniert einwandfrei, aber meine Komponententests können die Abhängigkeiten in den Verzeichnissen project1/ und project2/ nicht laden.

Zum Beispiel ist dies eine meiner Unit-Tests:

define([ 
    'intern!object', 
    'intern/chai!assert', 
    'jquery', 
    '../../../../project2/lib/js/var/document', 
    '../../../../project2/lib/js/exports/file/functions/resizeInput' 
], function(registerSuite, assert, $, document, resizeInput) { 
    registerSuite({ 
     name: 'functions', 
     resizeInput: function() { 
      var $input = $(document.createElement('input')); 
      resizeInput($input, 8, 20, 450, 200); 
      assert.equal($input.width(), 450); 
     } 
    }); 
}); 

und diesen Test läuft, gibt mir die folgende Fehlermeldung:

SUITE ERROR 
Error: Failed to load module ../project2/lib/js/var/document from 
project2/lib/js/var/document.js (parent: tests/unit/project2/functions) 
at HTMLScriptElement.handler <__intern\node_modules\dojo\loader.js:517:27> 

Wie kann ich diese externen Dateien von meinen anderen Projekten gehören ?

+0

Haben Sie darüber nachgedacht, die anderen Projekte Submodule machen das intern-test-projekt oder würde das deine intern-test-projektgröße zu groß machen? – Richard

+0

@Richard die Art, wie alles strukturiert ist, müssen sie separate Projekte sein (sonst würde ich nur meine intern-Tests Gruntfile in das 'www'-Verzeichnis) verschieben. – jperezov

Antwort

0

In Ordnung, also bis jemand mit einer besseren Lösung herauskommt, werde ich nur Symlinks innerhalb meines intern-tests/ Projektordners erstellen.

es unter Windows zu tun, sieht dies wie folgt aus:

mklink /j "c:\www\intern-tests\project-symlinks\project2" c:\www\project2 

, die die Konvention hat mklink /j "path\to\symlink" path\to\original (die/j für Übergang)

Auf Mac/Linux, würden Sie die folgende :

ln -s /www/project2 /www/intern-tests/project-symlinks/project2 

der das Übereinkommen ln -s /path/to/original /path/to/symlink (es für symbolisches ist) hat

Das sieht wie folgt aus:

www/ 
    project1/ 
     app/ 
     lib/ 
    project2/ 
     app/ 
     lib/ 
    intern-tests/ 
     project-symlinks/ 
      project1/ 
      project2/ 
     node_modules/ 
     tests/ 
      functional/ 
       project1-tests/ 
       project2-tests/ 
      unit/ 
       project1-tests/ 
       project2-tests/ 
      intern.js 
     Gruntfile.js 

und ändert mein Test auf die folgenden:

define([ 
    'intern!object', 
    'intern/chai!assert', 
    'jquery', 
    '../../../project-symlinks/project2/lib/js/var/document', 
    '../../../project-symlinks/project2/lib/js/exports/file/functions/resizeInput' 
], function(registerSuite, assert, $, document, resizeInput) { 
    registerSuite({ 
     name: 'functions', 
     resizeInput: function() { 
      var $input = $(document.createElement('input')); 
      resizeInput($input, 8, 20, 450, 200); 
      assert.equal($input.width(), 450); 
     } 
    }); 
}); 
+2

Dies ist möglicherweise in Ordnung, wenn Sie als einziger an Ihrem Code arbeiten. Andernfalls müssten Sie Personen mit diesem Prozess an Bord nehmen. Selbst wenn Sie Ihr Verzeichnis verschieben oder den Namen ändern? Ehrlich gesagt, wenn diese separate Verzeichnisse sein müssen, sollten Sie sie irgendwo, wie zum Beispiel github oder als npm-Module, hosten und dann über requirjs/browserify/webpack/was auch immer Sie bevorzugen, in Ihr Projekt einbinden. Wenn ein Projekt außerhalb seines Stammverzeichnisses modularisiert werden muss, ist die Verwendung des Abhängigkeitsmanagements der logische nächste Schritt. – dcochran

2

Vielleicht zu einfach ich denke, aber ich denke, es wie folgt aus:

  • project1 ist ein Projekt
  • project2 ist ein Projekt
  • intern_tests ist ein Projekt

Um das zu erreichen, was Sie erreichen wollen:

cd /path/to/project1/ 
npm link 

cd /path/to/project2/ 
npm link 

cd /path/to/intern_tests/ 
npm install project1 project2 

Sie jetzt eine Projektstruktur wie so haben:

intern_tests/ 
    node_modules/ 
     project1 
     project2 
    tests/ 
     unit/ 
     functional/