我正在按以下方式执行mocha-webpack:
"test": "node ./node_modules/mocha-webpack/bin/mocha-webpack --require ./src/tool/setup.js --webpack-config ./src/tool/webpack.config.test.js \"./dist/test.bundle.js\"",
我的webpack.config.test.js如下:
const path = require("path");
// const WebpackMochaPlugin = require('webpack-mocha-plugin');
const nodeExternals = require('webpack-node-externals');
module.exports = {
target: 'node',
mode: "development",
entry: {
test: "./src/test.bundle.ts",
},
output: {
path: path.resolve(__dirname, "../../dist"),
filename: "[name].bundle.js"
},
resolve: {
extensions: [".ts", ".js", "*.tsx"]
},
externals: [nodeExternals()],
devtool: "inline-source-map",
module: {
rules: [
{
enforce: "pre",
test: /\.js$/,
loader: "source-map-loader"
},
{
test: /\.(ts|tsx)$/,
loader: "ts-loader"
},
{
enforce: "post",
test: /\.(js|ts|tsx)$/,
// Exlude tests so they don't show up in coverage report.
exclude: /\.(spec)\.(ts|js)$/,
loader: "sourcemap-istanbul-instrumenter-loader",
query: {
"force-sourcemap": true
}
}
]
},
plugins: [
/*
new WebpackMochaPlugin({
codeCoverage: true
})*/
],
// When using code coverage exclude the coverage report from being watched.
// Otherwise you might get an infinite loop.
watchOptions: {
ignored: /coverage/
}
};
测试已内置到输出文件中,但是mocha-webpack并未执行/查找它们。
我的setup.js如下:
process.env.NODE_ENV = 'test';
const jsdom = require("jsdom");
const {
JSDOM
} = jsdom;
const {
document
} = (new JSDOM('<!doctype html><html><body></body></html>')).window;
global.document = document;
global.window = document.defaultView;
const noop = () => {};
require.extensions[".css"] = noop;
require.extensions[".scss"] = noop;
require.extensions[".ico"] = noop;
require.extensions[".png"] = noop;
require.extensions[".svg"] = noop;
/*
Object.keys(document.defaultView).forEach(
(property) => {
if (typeof global[property] === "undefined") {
exposedProperties.push(property);
global[property] = document.defaultView[property];
}
}
);*/
global.navigator = {
userAgent: "node.js"
};