Как избежать длинных относительных путей (../../../) с жасмином в разных средах?

В настоящее время я разрабатываю проект, который хочу протестировать в разных средах, включая node.js и разные браузеры с karma / selenium, чтобы избежать проблем с совместимостью. (Я думаю, что буду использовать browserify в браузерах, но я еще не знаком с ним.)

У меня есть вложенный каталог тестирования, примерно так:

repo/
- project.js
- project.my.module.js
- spec/
-- helpers/
--- a.jasmine.helper.js
-- support/
--- jasmine.json
-- project.my.module/
--- ModuleClass.spec.js
-- project.MyClass.spec.js
-- project.OtherClass.spec.js

В настоящее время я тестировал проект только с jasmine-npm (это jasmine 2.2 для node.js). При тестировании рабочий каталог - это repo/, где я запускаю node.exe с jasmine.js. jasmine.js загружает jasmine.json:

{
  "spec_dir": "spec",
  "spec_files": [
    "**/*[sS]pec.js"
  ],
  "helpers": [
    "helpers/**/*.js"
  ]
}

Теперь у меня тут 2 проблемы.

  • Как я могу избежать длинных относительных путей с помощью require, например require("../../project.my.module.js") в ModuleClass.spec.js файле? (Я бы предпочел использовать короткое постоянное имя, например, с помощью символической ссылки.)
  • Как сделать это таким образом, чтобы можно было запускать одни и те же тестовые файлы в разных браузерах? (Я хочу сохранить определения модуля commonjs по тестам.)

Я проверил несколько руководств по node.js, и, похоже, у меня есть два варианта. Я могу использовать package.json (с некоторыми неизвестными мне волшебными параметрами конфигурации) или переместить файлы, которые хочу загрузить, в node_modules/ (что, я уверен, я не буду делать). Я открыт для предложений, потому что не вижу, как можно решить эту проблему ...

изменить:

Кажется, что karma-browserify решает проблему тестирования, возможно, мне нужно добавить жасмин для браузера, но это нормально. Мне не нужно менять определения модуля commonjs тестами. Таким образом, можно тестировать как в node.js, так и в браузере с длинными путями.

edit2:

В итоге я добавил родительский каталог моего репо в NODE_PATH. Таким образом, мне могут потребоваться все проекты, над которыми я сейчас работаю.


person inf3rno    schedule 11.02.2015    source источник
comment
Ха-ха, наверное, я снова прошу невозможного ...: D   -  person inf3rno    schedule 11.02.2015
comment
Как насчет использования NODE_PATH? Или положить все в node_modules?   -  person laggingreflex    schedule 11.02.2015
comment
@laggingreflex Я не хочу менять структуру каталогов. Я проверю NODE_PATH как можно скорее.   -  person inf3rno    schedule 11.02.2015
comment
@laggingreflex Browserify, похоже, поддерживает NODE_PATH: github.com/substack/node-browserify/issues/ 726. Я нашел другое возможное решение: npm link Я тоже исследую это ...   -  person inf3rno    schedule 11.02.2015
comment
@laggingreflex Если вы хорошо понимаете, NODE_PATH переменная среды связана с изменением пути, который использует узел, чтобы требовать сторонние модули. Мне нравится устанавливать модули с npm по всему миру, и мои проекты много лет хранятся в структуре каталогов: /projects/{project-name}/, которую я тоже не хочу менять. Так что это недопустимо, или я что-то неправильно понял.   -  person inf3rno    schedule 11.02.2015
comment
require('any-module') будет искать any-module в ./node_modules (как обычно) и в путях, указанных в NODE_PATH. Если я понимаю ваше требование, вы хотите установить /projects/ в NODE_PATH, чтобы можно было require('project-name'). На самом деле, печатая это, я думаю, что, возможно, неправильно вас понял. То, что вы хотите, вероятно, npm link, да?   -  person laggingreflex    schedule 11.02.2015
comment
@laggingreflex Нет, я хочу require('project-name') в моих тестовых файлах, которые находятся в папке spec в репозитории проекта. Итак, вы говорите, что с NODE_PATH я смогу использовать как ~ inf3rno / node_modules /, так и проекты / в качестве источников модулей? Это было бы прекрасно!   -  person inf3rno    schedule 12.02.2015
comment
@laggingreflex NODE_PATH работает отлично. Я еще не пробовал использовать browserify, но afaik. browserify поддерживает это. Спасибо! Как давать баллы? : D   -  person inf3rno    schedule 13.02.2015
comment
Я бы превратил это в ответ, но я думаю, что на этом этапе у вас будет гораздо больше возможностей создать гораздо более подробный ответ, объяснив, почему он на самом деле сработал в вашем случае, и почему другие вещи не сработали и т. Д., И отметьте это как принятое. Я просто рад, что у тебя все получилось. :)   -  person laggingreflex    schedule 13.02.2015
comment
@laggingreflex Хорошо, тогда я принимаю другой ответ и редактирую свой вопрос после того, как проверил его в браузере. Спасибо за помощь!   -  person inf3rno    schedule 14.02.2015


Ответы (1)


Как насчет символьной ссылки на каталог вашего проекта в node_modules (например, как node_modules/project) и требования типа require("project/project.my.module.js")?

person JMM    schedule 11.02.2015
comment
Хорошая идея, попробую! - person inf3rno; 12.02.2015