2015-11-03 44 views
16

this question的回答不能回答我的問題。在實習生的項目目錄之外加載依賴項

我想加載從我的項目根外使用實習生作爲我的測試框架的依賴項。我目前有以下目錄結構的工作:

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 

正如你可以看到,我正在intern-tests自己的項目,並希望這個目錄來存放所有試驗所有我的項目。我已經設置了我的Gruntfile來執行測試,使用grunt exec庫將grunt projectName命令轉換爲grunt test --project=projectName。所有這些工作正常,但我的單元測試無法加載project1/project2/目錄中的依賴關係。

例如,這是我的單元測試之一:

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); 
     } 
    }); 
}); 

和運行測試給了我以下錯誤:

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> 

我怎麼能包括我的其他項目,這些外部文件?

+0

你有沒有考慮讓那些其他項目的子模塊實習生測試項目還是會讓你的實習生項目太大? – Richard

+0

@Richard一切都是結構化的,他們需要成爲單獨的項目(否則我只需將我的實習生Gruntfile移動到「www」目錄)。 – jperezov

回答

0

好的,所以直到有人提出更好的解決方案,我只是要在我的intern-tests/項目文件夾中創建符號鏈接。

要做到這一點在Windows上,這看起來像以下:

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

它具有約定mklink /j "path\to\symlink" path\to\original(中/ J是結)

在Mac/Linux上,你會做以下:

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

具有公約ln -s /path/to/original /path/to/symlink(該-s爲符號)

這看起來像如下:

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 

,並改變我的測試以下:

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

如果您是有史以來唯一一個處理您的代碼的人,那麼這可能很好,否則您將不得不讓這些人蔘與這個過程。即使如此,如果您移動目錄或更改名稱,該怎麼辦?老實說,如果這些需要分開的目錄,你應該考慮將它們託管在某處,例如github或npm模塊,然後通過requirejs/browserify/webpack /你喜歡的任何依賴關係管理器來請求它們進入你的項目。每當項目需要在其根目錄之外進行模塊化時,使用依賴管理是下一步的合理步驟。 – dcochran

2

也許我想得簡單,但我認爲它是這樣的:

  • project1是一個項目
  • project2是一個項目
  • intern_tests是一個項目

達到你想要達到的目標:

cd /path/to/project1/ 
npm link 

cd /path/to/project2/ 
npm link 

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

您現在有一個項目結構如下所示:

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