我正在尝试为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
匹配的每个文件。
这是我的webpack配置:
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 = {};
});
我现在正在尝试使用webpack进行构建,我可以在没有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
,但不再使用我在webpack配置中设置的别名。我知道别名应该可以正常工作,因为我可以在测试中加载service/Constants
。我想这有点麻烦,因为我要从Webpack项目外进入同级目录,试图获取要测试的源代码,但这不行吗?我在这里想念什么?
我使用的是在我的源代码中导入的要求样式(const dep = require('dep')
),而不是在测试中导入文件的方式,但是当我重新编写测试文件以匹配源文件的方式时完成后,我会得到相同的行为,所以我认为这不会有所作为。