Je porte des scripts npm aux chargeurs Webpack pour mieux apprendre comment Webpack fonctionne et j'ai tout fonctionne sauf pour mes tests Mocha: j'ai un test qui échoue, mais cela ne montre pas que Mocha est exécuté avec le mocha-loader
ou que le test échoue:
Que dois-je faire différemment pour obtenir tout src/**/*.test.js
fichiers avec lesquels exécuter Mocha dans Webpack?
npm test
pour voir comment les tests devraient fonctionnernpm run dev
pour voir comment les tests ne s'exécutent pas avec WebpackLe chargeur Mocha n'exécutera pas de tests lors de la construction, il est utilisé pour créer un ensemble contenant spécifiquement vos tests que vous pouvez ensuite exécuter à partir de votre navigateur.
Je recommanderais de créer un fichier de configuration webpack séparé pour vos tests, que vous pouvez ensuite héberger sur un serveur webpack-dev-server qui utilise un port différent de votre application. Voici un exemple qui correspond plus ou moins au modèle que j'utilise pour mes propres projets (au moment d'écrire cette réponse):
module.exports = {
entry: 'mocha!./tests/index.js',
output: {
filename: 'test.build.js',
path: 'tests/',
publicPath: 'http://' + hostname + ':' + port + '/tests'
},
module: {
loaders: [
{
test: /\.js$/,
loaders: ['babel-loader']
},
{
test: /(\.css|\.less)$/,
loader: 'null-loader',
exclude: [
/build/
]
},
{
test: /(\.jpg|\.jpeg|\.png|\.gif)$/,
loader: 'null-loader'
}
]
},
devServer: {
Host: hostname,
port: port
}
};
// This will search for files ending in .test.js and require them
// so that they are added to the webpack bundle
var context = require.context('.', true, /.+\.test\.js?$/);
context.keys().forEach(context);
module.exports = context;
"scripts": {
"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"
}
<!DOCTYPE html>
<html>
<head>
<title>Mocha</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./node_modules/mocha/mocha.css" />
<script src="/tests/test.build.js"></script>
</head>
<body>
</body>
</html>
Exécutez ensuite npm run devtest
, ouvert http://localhost:<port you picked>/webpack-dev-server/test.html
, et mocha devrait exécuter vos tests.
Si vous n'avez pas besoin de CSS/LESS ou d'images via vos modules, vous pouvez supprimer ces chargeurs de webpack.tests.config.js
.
Avec le chargement à chaud activé, c'est une configuration vraiment géniale car je peux avoir à la fois mon application et mes tests en cours d'exécution dans différents onglets du navigateur, puis mettre à jour mon code et voir mes modifications et mes tests réexécuter immédiatement.
Vous pouvez également exécuter npm run test
pour exécuter les mêmes tests via la ligne de commande.
J'espère que cela t'aides.
J'ai aimé la réponse de JimSkerritt, mais je n'ai pas pu la faire fonctionner sur mon ordinateur pour une raison quelconque. Avec les deux fichiers de configuration ci-dessous, vous pouvez exécuter l'application via:
npm start // then http://localhost:8080/bundle
et lancez vos tests avec:
npm test // then http://localhost:8081/webpack-dev-server/test
les deux serveurs se rechargent automatiquement et vous pouvez exécuter les deux simultanément!
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"
}
}