Загрузка зависимостей вне каталога проекта в 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);
}
});
});