Я пытаюсь настроить среду тестирования инструментов для файлов в repo
Вот структура каталогов, которую я использую:
code/
├── repo/
│ └── public/
│ └── service/
│ ├── Constants.js
│ └── HelloWorld.js
│
└── instrumentation/
├── tests/
│ ├── index.js
│ └── HelloWorld.test.js
│
├── package.json
└── webpack.config.js
Я хочу написатьтесты в code/instrumentation/tests
, мой index.js
файл загрузит каждый файл в каталоге tests
, который соответствует *.test.js
.
Вот мой конфиг веб-пакета:
const path = require('path');
module.exports = {
mode: 'development',
entry: 'mocha-loader!./tests/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}, {
test: /(\.css|\.less)$/,
exclude: /build/,
use: {
loader: 'null-loader',
}
}, {
test: /(\.jpg|\.jpeg|\.png|\.gif)$/,
use: {
loader: 'null-loader'
}
}]
},
resolve: {
alias: {
repo: '../../repo',
service: 'repo/public/service'
}
},
devtool: 'inline-source-map',
node: {fs: 'empty'}
};
Constants.js
define(function (require, exports, module) {
module.exports = {
ONE: 'one',
TWO: 'two'
};
});
HelloWorld.js
define(function (require, exports, module) {
const Constants = require('public/service/Constants');
console.log(Constants.ONE);
module.exports = {};
});
Я сейчас пытаюсь собрать с помощью веб-пакета, я могу запускать тесты безлюбые зависимости для HelloWorld.test.js
просто отлично.Я также могу импортировать repo/Constants
просто отлично в HelloWorld.test.js
, но я хочу, чтобы это работало:
HelloWorld.test.js
import * as chai from 'chai';
const {expect} = chai;
const Constants = require('service/Constants');
const HelloWorld = require('service/HelloWorld');
describe('tes tings', () => {
it('should work', () => {
expect(CallingConstants).not.to.equal(null);
expect(2 + 2).to.equal(4);
});
});
Когда я пытаюсь собрать с помощью Webpack, я получаю следующую ошибку:
ERROR in ../repo/public/service/HelloWorld.js
Module not found: Error: Can't resolve 'public/service/Constants' in '/Users/jman/Documents/code/repo/public/service'
@ ../repo/public/service/HelloWorld.js 2:18-53
@ ./tests/life.test.js
@ ./tests sync .+\.test\.js?$
@ ./node_modules/babel-loader/lib??ref--4!./tests/index.js
@ ./node_modules/mocha-loader!./tests/index.js
Кажется, что когда Webpack загрузил HelloWorld.js
, он пытается найти service/Constants
, но больше не использует псевдоним Iесть настройка в моем конфиге webpack.Я знаю, что псевдоним должен работать, так как я могу загрузить service/Constants
в моем тесте.Я полагаю, что это немного странно, так как я выхожу за пределы своего проекта webpack в одноуровневую директорию, пытаясь получить исходный код для тестирования, но разве это не должно работать?Что мне здесь не хватает?
Я использую требуемый стиль (const dep = require('dep')
) для импорта в исходный код, в отличие от того, как я импортирую файлы в своем тесте, но когда я переписываю свой тестфайл, чтобы соответствовать, как исходные файлы, я получаю то же самое поведение, поэтому я не думаю, что это должно иметь значение.