私はいくつかのnpmスクリプトをWebpackローダーに移植して、Webpackの仕組みをよりよく学習し、Mochaテスト以外のすべてが機能するようにしました。1つのテストに失敗しましたが、Mochaがmocha-loader
またはテストが失敗している:
WebpackのMochaで実行するすべてのsrc/**/*.test.js
ファイルを取得するには、別の方法で何をする必要がありますか?
npm test
を実行して、テストの動作を確認しますnpm run dev
を実行して、Webpackでテストが実行されない方法を確認しますMochaローダーはビルド中にテストを実行しません。これは、ブラウザから実行できるテストを含むバンドルを作成するために使用されます。
テスト用に別のwebpack構成ファイルを作成することをお勧めします。このファイルは、アプリケーションとは異なるポートを使用するwebpack-dev-serverでホストできます。以下は、私が自分のプロジェクトに使用しているパターンとほぼ同じ例です(この回答を書いている時点では)。
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>
次にnpm run devtest
を実行し、http://localhost:<port you picked>/webpack-dev-server/test.html
を開くと、mochaがテストを実行するはずです。
モジュールでCSS/LESSまたはイメージが必要ない場合は、webpack.tests.config.js
からこれらのローダーを削除できます。
ホットローディングを有効にすると、アプリケーションとテストの両方を異なるブラウザータブで実行し、コードを更新して変更とテストをすぐに再実行できるため、これは本当に素晴らしいセットアップです。
npm run test
を実行して、コマンドラインから同じテストを実行することもできます。
お役に立てれば。
私はJimSkerrittの答えが好きでしたが、何らかの理由でコンピューターで動作させることができませんでした。以下の2つの構成ファイルを使用すると、次の方法でアプリを実行できます。
npm start // then http://localhost:8080/bundle
そして、次を使用してテストを実行します。
npm test // then http://localhost:8081/webpack-dev-server/test
両方のサーバーが自動リロード&&同時に実行できます!
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"
}
}