Skip to content

Commit 6da2211

Browse files
feat: Added test coverage for analyzerMode
1 parent 45123cf commit 6da2211

2 files changed

Lines changed: 59 additions & 32 deletions

File tree

‎package-lock.json‎

Lines changed: 4 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎test/plugin.js‎

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)