@@ -144,22 +144,71 @@ describe("Plugin", () => {
144144
145145 try {
146146 await webpackCompile ( config ) ;
147-
148147 const server = await plugin . server ;
149148 expect ( server . http . listening ) . toBe ( true ) ;
150149 expect ( analyzerUrl ) . toHaveBeenCalledWith (
151150 expect . objectContaining ( {
152151 listenHost : "127.0.0.1" ,
153152 listenPort : 0 ,
153+ boundAddress : expect . objectContaining ( {
154+ address : "127.0.0.1" ,
155+ port : expect . any ( Number ) ,
156+ } ) ,
154157 } ) ,
155158 ) ;
156159 } finally {
157160 if ( plugin . server ) {
158- const server = await plugin . server ;
159- server . ws . close ( ) ;
160- await new Promise ( ( resolve ) => {
161- server . http . close ( ( ) => resolve ( ) ) ;
162- } ) ;
161+ try {
162+ const server = await plugin . server ;
163+ server . ws . close ( ) ;
164+ await new Promise ( ( resolve ) => {
165+ server . http . close ( resolve ) ;
166+ } ) ;
167+ } catch {
168+ // Ignore server cleanup error
169+ }
170+ }
171+ }
172+ } ) ;
173+
174+ it ( "should update chart data when a plugin instance is reused in server mode" , async ( ) => {
175+ const plugin = new BundleAnalyzerPlugin ( {
176+ analyzerMode : "server" ,
177+ analyzerPort : "auto" ,
178+ openAnalyzer : false ,
179+ logLevel : "error" ,
180+ } ) ;
181+ const firstConfig = makeWebpackConfig ( ) ;
182+ const secondConfig = makeWebpackConfig ( ) ;
183+
184+ firstConfig . output . path = path . resolve ( __dirname , "./output/first" ) ;
185+ firstConfig . plugins = [ plugin ] ;
186+ secondConfig . output . path = path . resolve ( __dirname , "./output/second" ) ;
187+ secondConfig . plugins = [ plugin ] ;
188+
189+ try {
190+ await webpackCompile ( firstConfig ) ;
191+ const server = await plugin . server ;
192+ const updateChartDataSpy = jest . spyOn ( server , "updateChartData" ) ;
193+
194+ await webpackCompile ( secondConfig ) ;
195+
196+ expect ( updateChartDataSpy ) . toHaveBeenCalledTimes ( 1 ) ;
197+ expect ( updateChartDataSpy ) . toHaveBeenCalledWith (
198+ expect . any ( Object ) ,
199+ path . resolve ( __dirname , "./output/second" ) ,
200+ ) ;
201+ } finally {
202+ if ( plugin . server ) {
203+ try {
204+ const server = await plugin . server ;
205+ server . ws . close ( ) ;
206+ await new Promise ( ( resolve ) => {
207+ server . http . close ( resolve ) ;
208+ } ) ;
209+ } catch {
210+ // Ignore server cleanup error
211+ }
163212 }
164213 }
165214 } ) ;
0 commit comments