Skip to content

Commit 85079f8

Browse files
committed
Update tests to Webpack 5 (v4 is unusable with Node 18)
1 parent 5262e77 commit 85079f8

File tree

2 files changed

+57
-18
lines changed

2 files changed

+57
-18
lines changed

karma.conf.js

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,52 +2,81 @@ const tmp = require('tmp');
22
tmp.setGracefulCleanup();
33

44
const webpack = require('webpack');
5+
const outputDir = tmp.dirSync({ unsafeCleanup: true }).name;
56

67
// Run a websocket server in the background for testing
78
require('./test/fixtures/websocket-test-server');
89

910
module.exports = function(config) {
1011
config.set({
11-
frameworks: ['mocha', 'chai'],
12+
frameworks: ['mocha', 'chai', 'webpack'],
1213
files: [
13-
'test/**/*.spec.ts'
14+
'test/**/*.spec.ts',
15+
// Required for wasm due to https://github.com/ryanclark/karma-webpack/issues/498. Results
16+
// in an annoying warning before the webpack build, but then it works fine.
17+
{ pattern: `${outputDir}/**/*`, included: false, served: true }
1418
],
1519
mime: { 'text/x-typescript': ['ts'] },
1620
webpack: {
1721
mode: 'development',
18-
devtool: false,
22+
devtool: 'source-map',
1923
resolve: {
2024
extensions: ['.ts', '.js'],
2125
alias: {
2226
// Here we put stubs for non-browser modules that are used by tests, not core code.
2327
// Core code stubs are set in pkgJson.browser.
24-
"http-proxy-agent$": require.resolve('./test/empty-stub.js'),
25-
"https-proxy-agent$": require.resolve('./test/empty-stub.js'),
26-
"request-promise-native$": require.resolve('./test/empty-stub.js'),
27-
"fs-extra$": require.resolve('./test/empty-stub.js'),
28-
"portfinder$": require.resolve('./test/empty-stub.js')
28+
"http-proxy-agent": require.resolve('./test/empty-stub.js'),
29+
"https-proxy-agent": require.resolve('./test/empty-stub.js'),
30+
"request-promise-native": require.resolve('./test/empty-stub.js'),
31+
"fs-extra": require.resolve('./test/empty-stub.js'),
32+
"portfinder": require.resolve('./test/empty-stub.js'),
33+
"dns2": require.resolve('./test/empty-stub.js')
34+
},
35+
fallback: {
36+
// With Webpack 5, we need explicit mocks for all node modules. Because the
37+
// tests are the same for node & browser, with tests simply skipped in
38+
// browsers, plus some actual deps on node modules, we end up with a bunch
39+
// of deps that need to be manually included/skipped here:
40+
fs: false,
41+
net: false,
42+
http: false,
43+
https: false,
44+
http2: false,
45+
tls: false,
46+
47+
assert: require.resolve('assert/'),
48+
buffer: require.resolve('buffer/'),
49+
crypto: require.resolve('crypto-browserify'),
50+
zlib: require.resolve('browserify-zlib'),
51+
stream: require.resolve('stream-browserify'),
52+
path: require.resolve('path-browserify'),
53+
querystring: require.resolve('querystring-es3'),
54+
util: require.resolve('util/'),
55+
url: require.resolve('url/')
2956
}
3057
},
3158
module: {
3259
rules: [
3360
{ test: /\.ts$/, loader: 'ts-loader', exclude: /node_modules/ }
3461
]
3562
},
63+
experiments: {
64+
asyncWebAssembly: true
65+
},
3666
node: {
37-
fs: 'empty',
3867
__dirname: true
3968
},
4069
plugins: [
41-
new webpack.IgnorePlugin(/^dns2$/),
42-
new webpack.DefinePlugin({
43-
"process.version": '"' + process.version + '"'
44-
}),
4570
new webpack.SourceMapDevToolPlugin({
4671
test: /\.(ts|js|css)($|\?)/i
72+
}),
73+
new webpack.ProvidePlugin({
74+
process: 'process/browser',
75+
Buffer: ['buffer', 'Buffer'],
4776
})
4877
],
4978
output: {
50-
path: tmp.dirSync()
79+
path: outputDir
5180
}
5281
},
5382
webpackMiddleware: {

package.json

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,15 @@
117117
"@types/uuid": "8.3.4",
118118
"@types/ws": "7.4.7",
119119
"agent-base": "^4.2.1",
120+
"assert": "^2.0.0",
120121
"brotli-wasm": "^1.0.0",
122+
"browserify-zlib": "^0.2.0",
123+
"buffer": "^6.0.3",
121124
"catch-uncommitted": "^1.0.0",
122125
"chai": "^3.5.0",
123126
"chai-as-promised": "^6.0.0",
124127
"chai-fetch": "^0.3.1",
128+
"crypto-browserify": "^3.12.0",
125129
"dns2": "1.4.2",
126130
"fs-extra": "^8.1.0",
127131
"http-proxy-agent": "^2.0.0",
@@ -132,22 +136,28 @@
132136
"karma-mocha": "^2.0.1",
133137
"karma-sourcemap-loader": "^0.3.7",
134138
"karma-spec-reporter": "0.0.32",
135-
"karma-webpack": "^4.0.2",
139+
"karma-webpack": "^5.0.0",
136140
"mocha": "^9.1.3",
137141
"node-abort-controller": "^3.0.1",
138-
"null-loader": "^3.0.0",
139142
"opn": "^5.1.0",
143+
"path-browserify": "^1.0.1",
144+
"process": "^0.11.10",
145+
"querystring-es3": "^0.2.1",
140146
"request": "^2.75.0",
141147
"request-promise-native": "^1.0.3",
142148
"rimraf": "^2.5.4",
143149
"semver": "^5.5.0",
144150
"source-map-support": "^0.5.3",
151+
"stream-browserify": "^3.0.0",
145152
"tmp-promise": "^1.0.3",
146-
"ts-loader": "^8.0.2",
153+
"ts-loader": "^9.2.9",
147154
"ts-node": "^9.1.1",
148155
"typedoc": "^0.22.4",
149156
"typescript": "4.5.5",
150-
"webpack": "^4.46.0",
157+
"url": "^0.11.0",
158+
"util": "^0.12.4",
159+
"webpack": "^5.72.0",
160+
"zlib-browserify": "^0.0.3",
151161
"zstd-codec": "^0.1.4"
152162
},
153163
"engines": {

0 commit comments

Comments
 (0)