Dan*_*ott 50 mocha.js npm reactjs webpack redux
我正在开发一个在React/Redux/Webpack中工作的Web应用程序,现在我开始将测试与Mocha集成.
我按照Redux文档中的编写测试说明进行操作,但现在我遇到了webpack别名的问题.
例如,请查看我的一个动作创建者的此测试的导入部分:
import expect from 'expect' // resolves without an issue
import * as actions from 'actions/app'; // can't resolve this alias
import * as types from 'constants/actionTypes'; // can't resolve this alias
describe('Actions', () => {
describe('app',() => {
it('should create an action with a successful connection', () => {
const host = '***************',
port = ****,
db = '******',
user = '*********',
pass = '******';
const action = actions.createConnection(host, port, db, user, pass);
const expectedAction = {
type: types.CREATE_CONNECTION,
status: 'success',
payload: { host, port, database, username }
};
expect(action).toEqual(expectedAction);
});
});
});
Run Code Online (Sandbox Code Playgroud)
正如评论所示,mocha在引用别名依赖项时无法解析我的import语句.
因为我还是webpack的新手,这是我的webpack.config.js:
module.exports = {
devtool: 'eval-source-map',
entry: [
'webpack-hot-middleware/client',
'./src/index'
],
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/static/'
},
resolve: {
extensions : ['', '.js', '.jsx'],
alias: {
actions: path.resolve(__dirname, 'src', 'actions'),
constants: path.resolve(__dirname, 'src', 'constants'),
/* more aliases */
}
},
plugins: [
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
],
module: {
loaders: [{
test: /\.js$/,
loaders: ['babel'],
exclude: /node_modules/,
include: __dirname
}]
}
};
Run Code Online (Sandbox Code Playgroud)
另外,我正在使用命令npm test运行mocha,这是我正在使用的脚本package.json.
{
"scripts": {
"test": "mocha ./src/**/test/spec.js --compilers js:babel-core/register --recursive"
}
}
Run Code Online (Sandbox Code Playgroud)
所以这就是我被卡住的地方.我需要在运行时将webpack中的别名包含到mocha中.
Dan*_*ott 37
好的,所以我意识到我所有的别名都在src/目录中,所以我只需要修改我的npm run test脚本.
{
"scripts": {
"test": "NODE_PATH=./src mocha ./src/**/test/spec.js --compilers js:babel-core/register --recursive"
}
}
Run Code Online (Sandbox Code Playgroud)
可能不适合所有人,但这解决了我的问题.
adr*_*ine 15
您还可以使用我创作的babel插件:https:
//github.com/trayio/babel-plugin-webpack-alias
它会将您的别名路径转换为相对路径,只需将babel插件包含在您的.babelrc.
我也遇到了同样的问题,但是使用此插件,我解决了它。
https://www.npmjs.com/package/babel-plugin-webpack-aliases
您的“ mocha”的执行命令未读取webpack.config.js,因此无法解析别名。
通过设置此插件,请webpack.config.js在使用“ babel-core / register”进行编译时考虑。结果,别名在测试期间也将有效。
npm i -D babel-plugin-webpack-aliases
Run Code Online (Sandbox Code Playgroud)
并将此设置添加到 .babelrc
{
"plugins": [
[ "babel-plugin-webpack-aliases", { "config": "./webpack.config.js" } ]
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14060 次 |
| 最近记录: |