Ich portiere einige npm-Skripte auf Webpack-Loader, um besser zu lernen, wie Webpack funktioniert, und ich habe alles außer meinen Mocha-Tests zum Laufen gebracht: Ich habe einen Test, der nicht funktioniert, aber es zeigt nicht, dass Mocha mit dem mocha-loader
oder dass der Test fehlschlägt:
Was muss ich anders machen, um alle src/**/*.test.js
- Dateien mit Mocha in Webpack zum Laufen zu bringen?
npm test
Aus, um zu sehen, wie Tests funktionieren sollennpm run dev
Aus, um zu sehen, wie Tests mit Webpack nicht ausgeführt werdenMocha Loader führt während der Erstellung keine Tests aus. Es wird verwendet, um ein spezielles Paket mit Ihren Tests zu erstellen, das Sie dann über Ihren Browser ausführen können.
Ich würde empfehlen, eine separate Webpack-Konfigurationsdatei für Ihre Tests zu erstellen, die Sie dann auf einem Webpack-Dev-Server hosten können, der einen anderen Port als Ihre Anwendung verwendet. Hier ist ein Beispiel, das mehr oder weniger dem Muster entspricht, das ich für meine eigenen Projekte verwende (zum Zeitpunkt der Erstellung dieser Antwort):
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>
Führen Sie dann npm run devtest
Aus, öffnen Sie http://localhost:<port you picked>/webpack-dev-server/test.html
, Und Mokka sollte Ihre Tests ausführen.
Wenn Sie kein CSS/WENIGER oder keine Bilder für Ihre Module benötigen, können Sie diese Loader aus webpack.tests.config.js
Entfernen.
Wenn das Laden im laufenden Betrieb aktiviert ist, ist dies eine großartige Einrichtung, da sowohl meine Anwendung als auch meine Tests in verschiedenen Browser-Registerkarten ausgeführt werden können. Anschließend wird der Code aktualisiert und die Änderungen und Tests werden sofort erneut ausgeführt.
Sie können auch npm run test
Ausführen, um dieselben Tests über die Befehlszeile auszuführen.
Hoffe das hilft.
Ich mochte JimSkerritts Antwort, konnte sie aber aus irgendeinem Grund nicht auf meinem Computer zum Laufen bringen. Mit den beiden folgenden Konfigurationsdateien können Sie die App ausführen über:
npm start // then http://localhost:8080/bundle
und führen Sie Ihre Tests mit:
npm test // then http://localhost:8081/webpack-dev-server/test
beide Server werden automatisch neu geladen && Sie können beide gleichzeitig ausführen!
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"
}
}