Загрузка зависимостей вне каталога проекта в Intern

Ответ на этот вопрос не отвечает на мой вопрос.

Я хотел бы загружать зависимости из-за пределов моего корня проекта, используя Intern в качестве моей тестовой среды. В настоящее время я работаю со следующей структурой каталогов:

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>

Как включить эти внешние файлы из других моих проектов?

Ответы

Ответ 1

Возможно, я думаю слишком просто, но я думаю об этом так:

  • 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/

Ответ 2

Хорошо, так как пока кто-то выходит с лучшим решением, я просто собираюсь создавать символические ссылки в моей папке проекта 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);
        }
    });
});