@@ -4,6 +4,7 @@ const url = require("node:url");
44const puppeteer = require ( "puppeteer" ) ;
55const BundleAnalyzerPlugin = require ( "../lib/BundleAnalyzerPlugin" ) ;
66const { isZstdSupported } = require ( "../src/sizeUtils" ) ;
7+ const webpack = require ( "webpack" ) ;
78const {
89 forEachWebpackVersion,
910 makeWebpackConfig,
@@ -95,9 +96,11 @@ describe("Plugin", () => {
9596 recursive : true ,
9697 } ) ;
9798 } ) ;
98-
99+ const NODE_MAJOR = Number . parseInt ( process . versions . node . split ( "." ) [ 0 ] , 10 ) ;
100+ const SKIP_WEBPACK_4 = NODE_MAJOR >= 20 ;
101+
102+ if ( ! SKIP_WEBPACK_4 ) {
99103 forEachWebpackVersion ( [ "4.44.2" ] , ( { it, webpackCompile } ) => {
100- // Webpack 5 doesn't support `jsonpFunction` option
101104 it ( "should support webpack config with custom `jsonpFunction` name" , async ( ) => {
102105 const config = makeWebpackConfig ( {
103106 multipleChunks : true ,
@@ -113,8 +116,9 @@ describe("Plugin", () => {
113116 } ) ;
114117 } ) ;
115118 } ) ;
119+ }
116120
117- /* eslint jest/no-standalone-expect: ["error", { additionalTestBlockFunctions: ["forEachWebpackVersion"] }] */
121+ /* eslint jest/no-standalone-expect: ["error", { additionalTestBlockFunctions: ["forEachWebpackVersion", "runTest" ] }] */
118122 forEachWebpackVersion ( ( { it, webpackCompile } ) => {
119123 it ( "should allow to generate json report" , async ( ) => {
120124 const config = makeWebpackConfig ( {
@@ -182,7 +186,8 @@ describe("Plugin", () => {
182186 } ) ;
183187
184188 describe ( "reportTitle" , ( ) => {
185- it ( "should have a sensible default" , async ( ) => {
189+ const runTest = SKIP_WEBPACK_4 ? it . skip : it ;
190+ runTest ( "should have a sensible default" , async ( ) => {
186191 const config = makeWebpackConfig ( ) ;
187192 await webpackCompile ( config , "4.44.2" ) ;
188193 const generatedReportTitle = await getTitleFromReport ( ) ;
@@ -191,7 +196,7 @@ describe("Plugin", () => {
191196 ) ;
192197 } ) ;
193198
194- it ( "should support a string value" , async ( ) => {
199+ runTest ( "should support a string value" , async ( ) => {
195200 const reportTitle = "A string report title" ;
196201 const config = makeWebpackConfig ( {
197202 analyzerOpts : {
@@ -203,7 +208,7 @@ describe("Plugin", () => {
203208 expect ( generatedReportTitle ) . toBe ( reportTitle ) ;
204209 } ) ;
205210
206- it ( "should support a function value" , async ( ) => {
211+ runTest ( "should support a function value" , async ( ) => {
207212 const reportTitleResult = "A string report title" ;
208213 const config = makeWebpackConfig ( {
209214 analyzerOpts : {
@@ -215,7 +220,7 @@ describe("Plugin", () => {
215220 expect ( generatedReportTitle ) . toBe ( reportTitleResult ) ;
216221 } ) ;
217222
218- it ( "should propagate an error in a function " , async ( ) => {
223+ runTest ( "should log an error when reportTitle throws " , async ( ) => {
219224 const reportTitleError = new Error ( "test" ) ;
220225 const config = makeWebpackConfig ( {
221226 analyzerOpts : {
@@ -225,33 +230,34 @@ describe("Plugin", () => {
225230 } ,
226231 } ) ;
227232
228- let error = null ;
229- try {
230- await webpackCompile ( config , "4.44.2" ) ;
231- } catch ( err ) {
232- error = err ;
233- }
233+ const errorSpy = jest . spyOn ( console , " error" ) . mockImplementation ( ( ) => { } ) ;
234+ await webpackCompile ( config , "4.44.2" ) ;
235+
236+ expect ( errorSpy ) . toHaveBeenCalledWith (
237+ expect . stringContaining ( "action failed: test" ) ,
238+ ) ;
234239
235- expect ( error ) . toBe ( reportTitleError ) ;
240+ errorSpy . mockRestore ( ) ;
236241 } ) ;
237242 } ) ;
238243
239244 describe ( "compressionAlgorithm" , ( ) => {
240- it ( "should default to gzip" , async ( ) => {
245+ const runTest = SKIP_WEBPACK_4 ? it . skip : it ;
246+ runTest ( "should default to gzip" , async ( ) => {
241247 const config = makeWebpackConfig ( { analyzerOpts : { } } ) ;
242248 await webpackCompile ( config , "4.44.2" ) ;
243249 await expectValidReport ( { parsedSize : 1317 , gzipSize : 341 } ) ;
244250 } ) ;
245251
246- it ( "should support gzip" , async ( ) => {
252+ runTest ( "should support gzip" , async ( ) => {
247253 const config = makeWebpackConfig ( {
248254 analyzerOpts : { compressionAlgorithm : "gzip" } ,
249255 } ) ;
250256 await webpackCompile ( config , "4.44.2" ) ;
251257 await expectValidReport ( { parsedSize : 1317 , gzipSize : 341 } ) ;
252258 } ) ;
253259
254- it ( "should support brotli" , async ( ) => {
260+ runTest ( "should support brotli" , async ( ) => {
255261 const config = makeWebpackConfig ( {
256262 analyzerOpts : { compressionAlgorithm : "brotli" } ,
257263 } ) ;
@@ -264,7 +270,7 @@ describe("Plugin", () => {
264270 } ) ;
265271
266272 if ( isZstdSupported ) {
267- it ( "should support zstd" , async ( ) => {
273+ runTest ( "should support zstd" , async ( ) => {
268274 const config = makeWebpackConfig ( {
269275 analyzerOpts : { compressionAlgorithm : "zstd" } ,
270276 } ) ;
0 commit comments