2015-11-03 18 views
16

Câu trả lời cho this question không trả lời được câu hỏi của tôi.Tải phụ thuộc bên ngoài thư mục dự án trong Intern

Tôi muốn tải các phụ thuộc từ bên ngoài gốc dự án của mình bằng cách sử dụng Intern làm khung kiểm tra của tôi. Tôi hiện đang làm việc với cấu trúc thư mục sau:

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 

Như bạn thấy, tôi đang làm cho intern-tests dự án riêng của mình, và muốn thư mục này để giữ tất cả thử nghiệm của tôi cho tất cả các dự án của tôi. Tôi đã thiết lập Gruntfile của mình để thực hiện các kiểm tra với thư viện exec grunt chuyển đổi lệnh grunt projectName thành grunt test --project=projectName. Tất cả đều hoạt động tốt, nhưng kiểm tra đơn vị của tôi không thể tải các phụ thuộc trong các thư mục project1/project2/.

Ví dụ, đây là một trong các bài kiểm tra đơn vị của tôi:

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

và chạy thử nghiệm cung cấp cho tôi những lỗi sau:

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> 

Làm thế nào tôi có thể bao gồm những tập tin bên ngoài từ các dự án khác của tôi ?

+0

Bạn đã xem là làm cho những dự án submodules khác dự án thử nghiệm thực tập hoặc điều đó chỉ làm cho quy mô dự án thử nghiệm thực tập của bạn quá lớn? – Richard

+0

@Richard cách mọi thứ được cấu trúc, chúng cần phải là các dự án riêng biệt (nếu không tôi chỉ muốn chuyển các bài kiểm tra thực tập của tôi Gruntfile vào thư mục 'www'). – jperezov

Trả lời

0

Được rồi, vì vậy cho đến khi có ai đó đưa ra giải pháp tốt hơn, tôi sẽ tạo các liên kết tượng trưng trong thư mục dự án intern-tests/ của tôi.

Để làm điều đó trên Windows, điều này có vẻ giống như sau:

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

trong đó có Công ước mklink /j "path\to\symlink" path\to\original (thư mục/j là ngã ba)

Trên Mac/Linux, bạn sẽ làm như sau :

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

trong đó có Công ước ln -s /path/to/original /path/to/symlink (các -s là dành cho biểu tượng)

này trông giống như sau:

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 

Và thay đổi thử nghiệm của tôi như sau:

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

Điều này có khả năng tốt nếu bạn là người duy nhất từng làm việc trên mã của mình, nếu không bạn phải đưa mọi người vào quá trình này. Thậm chí vẫn còn, nếu bạn di chuyển thư mục của bạn xung quanh hoặc thay đổi tên? Thành thật mà nói nếu cần phải là thư mục riêng biệt, bạn nên lưu trữ chúng ở đâu đó, chẳng hạn như github hoặc như npm modules, sau đó yêu cầu chúng vào dự án của bạn thông qua requirejs/browserify/webpack/bất kỳ trình quản lý phụ thuộc nào bạn thích. Bất cứ khi nào một dự án phải modularize bên ngoài thư mục gốc của nó, việc sử dụng quản lý phụ thuộc là bước tiếp theo hợp lý. – dcochran

2

Có lẽ tôi đang suy nghĩ quá đơn giản, nhưng tôi nghĩ về nó như thế này:

  • project1 là một dự án
  • project2 là một dự án
  • intern_tests là một dự án

Để đạt được những gì bạn muốn đạt được:

cd /path/to/project1/ 
npm link 

cd /path/to/project2/ 
npm link 

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

Bây giờ bạn có một cấu trúc dự án như sau:

intern_tests/ 
    node_modules/ 
     project1 
     project2 
    tests/ 
     unit/ 
     functional/ 
Các vấn đề liên quan