Npm 摩卡咖啡测试don';t使用Webpack和mocha loader运行 背景
我正在将一些npm脚本移植到Webpack loader,以便更好地了解Webpack的工作原理,除了我的Mocha测试外,我的所有工作都正常:我有一个测试失败,但它并没有显示Mocha正在使用Npm 摩卡咖啡测试don';t使用Webpack和mocha loader运行 背景,npm,reactjs,mocha.js,webpack,webpack-dev-server,Npm,Reactjs,Mocha.js,Webpack,Webpack Dev Server,我正在将一些npm脚本移植到Webpack loader,以便更好地了解Webpack的工作原理,除了我的Mocha测试外,我的所有工作都正常:我有一个测试失败,但它并没有显示Mocha正在使用Mocha loader运行,或者测试失败: 问题: 要让所有src/***/.test.js文件与Webpack中的Mocha一起运行,我需要做哪些不同的操作 复制步骤 克隆 运行npm测试查看测试应该如何工作 运行npm运行dev,查看测试如何不使用Webpack运行 Mocha loader不会在
Mocha loader运行,或者测试失败:
问题:
要让所有src/***/.test.js
文件与Webpack中的Mocha一起运行,我需要做哪些不同的操作
复制步骤
克隆
运行npm测试
查看测试应该如何工作
运行npm运行dev
,查看测试如何不使用Webpack运行
Mocha loader不会在构建时运行测试,它用于创建一个专门包含测试的包,然后您可以从浏览器运行该包
我建议为您的测试创建一个单独的webpack配置文件,然后您可以将其托管在使用不同于应用程序端口的webpack dev服务器上。这里有一个例子或多或少是我在自己的项目中使用的模式(在写这个答案时):
webpack.tests.config.js
module.exports={
条目:'mocha!。/tests/index.js',
输出:{
文件名:“test.build.js”,
路径:“tests/”,
publicPath:'http://'+hostname+':'+port+'/tests'
},
模块:{
装载机:[
{
测试:/\.js$/,,
加载器:['babel-loader']
},
{
测试:/(\.css\.less)$/,
加载器:“空加载器”,
排除:[
/建造/
]
},
{
测试:/(\.jpg\.jpeg\.png\.gif)$/,
加载程序:“空加载程序”
}
]
},
开发服务器:{
主机名:,
港口:港口
}
};
tests/index.js
//这将搜索以.test.js结尾的文件并需要它们
//以便将它们添加到Web包包包中
var context=require.context('.',true,/.+\.test\.js?$/);
context.keys().forEach(context);
module.exports=上下文;
package.json
“脚本”:{
“test”:“find./-name'*.test.js'| xargs mocha-R min-R babel/register”,
“devtest”:“webpack dev server--config webpack.tests.config.js”,
“dev”:“webpack dev server--config webpack.config.js”
}
test.html
摩卡
然后运行npm运行devtest
,打开http://localhost:/webpack-dev server/test.html
,mocha应该运行您的测试
如果您的模块不需要CSS/LESS或图像,您可以从webpack.tests.config.js
中删除这些加载程序
启用热加载后,这是一个非常好的设置,因为我可以让我的应用程序和测试在不同的浏览器选项卡中运行,然后更新代码,并立即看到我的更改和测试重新运行
您还可以运行npm run test
,通过命令行执行相同的测试
希望这能有所帮助。我喜欢吉姆·克里特的答案,但由于某种原因无法在我的电脑上运行。使用以下两个配置文件,您可以通过以下方式运行应用程序:
npm start // then http://localhost:8080/bundle
并使用以下工具运行测试:
npm test // then http://localhost:8081/webpack-dev-server/test
两台服务器自动重新加载&&您可以同时运行这两台服务器
配置文件
webpack.config.js
package.json
值得注意的是,这种方法要求您记住在集中索引文件中列出所有测试。如果您忘记了,测试将永远不会运行。其他方法(包括将Mocha配置为忽略网页包功能)不需要维护集中的测试列表。我建议采用这种方法:我不久前更新了我的答案,使用了更好的index.js版本,不需要导入每个测试模块。您可以使用require.context
扫描所有测试。很棒的一点,吉姆,我错过了!也就是说,我选择了这条路线,因为它避免了为测试设置专用的webpack.config:@JimSkerritt我尝试cli'find./-name'*.test.js'| xargs mocha-R min-R babel/register',它说找不到模块babel/resgiter。你有一个简单的.test.js文件,我可以参考并了解如何编写它吗?
module.exports = {
entry: "./index.js",
output: {
path: __dirname + "/build",
filename: "bundle.js"
},
module: {
loaders: [
{ test: /\.css$/, loader: "style!css" }
]
}
};
{
"name": "2dpointfinder",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "webpack-dev-server --inline",
"test": "webpack-dev-server 'mocha!./tests/test.js' --output-filename test.js --port 8081"
},
"author": "",
"license": "ISC",
"dependencies": {
"css-loader": "^0.19.0",
"style-loader": "^0.12.4"
},
"devDependencies": {
"mocha": "^2.3.3",
"mocha-loader": "^0.7.1",
"should": "^7.1.0"
}
}