@@ -2,52 +2,81 @@ const tmp = require('tmp');
22tmp . setGracefulCleanup ( ) ;
33
44const webpack = require ( 'webpack' ) ;
5+ const outputDir = tmp . dirSync ( { unsafeCleanup : true } ) . name ;
56
67// Run a websocket server in the background for testing
78require ( './test/fixtures/websocket-test-server' ) ;
89
910module . 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 : / \. t s $ / , loader : 'ts-loader' , exclude : / n o d e _ m o d u l e s / }
3461 ]
3562 } ,
63+ experiments : {
64+ asyncWebAssembly : true
65+ } ,
3666 node : {
37- fs : 'empty' ,
3867 __dirname : true
3968 } ,
4069 plugins : [
41- new webpack . IgnorePlugin ( / ^ d n s 2 $ / ) ,
42- new webpack . DefinePlugin ( {
43- "process.version" : '"' + process . version + '"'
44- } ) ,
4570 new webpack . SourceMapDevToolPlugin ( {
4671 test : / \. ( t s | j s | c s s ) ( $ | \? ) / 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 : {
0 commit comments