Нельзя разрешить динамические модули с помощью require("a")
, поскольку в папке вашего проекта может быть файл с именем a.js
, а в node_modules/a
может быть пакет npm, что может привести к большему количеству ошибок.
Но есть варианты, которые вы можете сделать, чтобы избежать использования require("../src/")
.
Один из таких вариантов объяснен ниже (с использованием babel)
Структура папки
src/
level1/
b.js
a.js
test/
a.test.js
Шаг 1
Установка Babel и aнесколько других зависимостей
npm install --save-dev @babel/core @babel/cli @babel/preset-env babel-plugin-module-resolver
Шаг 2
Создание и настройка .babelrc
файла в корневом каталоге проекта.
{
"presets": [
"@babel/env"
],
"plugins": [
[
"module-resolver",
{
"root": [
"./src"
],
"alias": {
"level1": "./src/level1"
}
}
]
]
}
Здесь, в module-resolver
раздел Я добавил 2 псевдонима для путей к папкам.
"root": ["./src"]
разрешает доступ к любому файлу в папке src
, используя require("/path_to_file")
. Пример: - require("/a")
, require("/level1/b")
"alias": {"level1": "./src/level1"}
разрешает доступ к любому файлу в папке src/level1
, используя require("level1/path_to_file")
. Пример: - require("level1/b")
Шаг 3
Запустите тесты, используя mocha --require @babel/register
.
Окончательный вариант package.json
будет выглядеть следующим образом.
{
"name": "foo",
"scripts": {
"test": "mocha --require @babel/register",
},
"devDependencies": {
"@babel/cli": "^7.6.4",
"@babel/core": "^7.6.4",
"@babel/preset-env": "^7.6.3",
"@babel/register": "^7.6.2",
"babel-plugin-module-resolver": "^3.2.0",
"mocha": "6.1.4"
}
}
a.test.js
var a = require("/a");
var level1 = require("level1/b");
var assert = require("assert");
describe("a.js", function() {
it("should return `Hello from A`", function() {
assert.equal(a(), "Hello from A");
});
});
describe("b.js", function() {
it("should return `Hello from B`", function() {
assert.equal(level1(), "Hello from B");
});
});
Соответствующие документы
https://babeljs.io/docs/en/
https://github.com/tleunen/babel-plugin-module-resolver