Как использовать абсолютные пути импорта при написании тестов для конкретного модуля - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю над проектом NodeJS (v. 8.12.0, EcmaScript 6), структура проекта которого похожа на:

project_root/
    src/
        utils/
            protocol_messages/
                helpers.js
    tests/
        unit/
            utils/
                protocol_messages/
                    helpers.js

Я пишу тесты, используя Mocha в качестве каркаса тестов.

Вопрос
Как правильно импортировать тестируемый модуль в helpers.js в tests/unit/utils/protocol_messages/?

Чтобы уточнить:
Я хочу избежать относительного пути в: require('../../../../../src/utils/protocol_messages/helpers').
Это работает, но это уродливо, и если структура проекта изменится, мне также придется переписать импорт тестов.

(Я новичок в Javascript, поэтому могу ошибаться в нескольких вещах.)

Обновление
Решения, представленные в этот вопрос :

  1. require.main.require: в комментарии к этот ответ , "Это решение не будет работать, если код покрыт модульными тестами, такими как тест Мокка".
  2. Извлечение моих утилит в модуль узла не имеет смысла для меня, так как код очень специфичен для приложения.
  3. Наличие дополнительного node_modules под моим src/ корневым каталогом проекта NodeJS, похоже, не имеет смысла.
  4. Использование транспортера Javascript, когда я использую только функции, доступные в NodeJSи написание проектов CommonJS кажется излишним.

Если я ошибаюсь по любому из вышеперечисленных пунктов, пожалуйста, укажите это, поскольку я в растерянности.Мне кажется, что NodeJS не предоставляет собственный способ импорта модулей CommonJS с абсолютными путями.

1 Ответ

0 голосов
/ 24 июля 2019

Вы можете использовать пакет wavy npm.

Этот модуль позволяет вам поворачивать вещи, как требовать ('../../../../ foo')во что-то вроде require ('~ / foo').Он работает так, что при постинсталляции он создает символическую ссылку в app / node_modules / ~, чтобы указать на приложение /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...