webpack/test/MultiStats.test.js

309 lines
5.6 KiB
JavaScript
Raw Normal View History

"use strict";
require("./helpers/warmup-webpack");
2025-07-03 17:06:45 +08:00
const { Volume, createFsFromVolume } = require("memfs");
2025-07-18 20:28:16 +08:00
const compile = (options) =>
new Promise((resolve, reject) => {
const webpack = require("..");
2025-07-18 20:28:16 +08:00
const compiler = webpack(options);
compiler.outputFileSystem = createFsFromVolume(new Volume());
compiler.run((err, stats) => {
if (err) {
reject(err);
} else {
resolve(stats);
}
});
});
describe("MultiStats", () => {
it("should create JSON of children stats", async () => {
const stats = await compile([
2019-02-19 15:58:46 +08:00
{
context: __dirname,
entry: "./fixtures/a"
},
{
context: __dirname,
entry: "./fixtures/b"
}
]);
2025-07-18 20:28:16 +08:00
const statsObject = stats.toJson();
expect(statsObject).toEqual(
expect.objectContaining({ children: expect.any(Array) })
);
expect(statsObject.children).toHaveLength(2);
});
it("should work with a boolean value", async () => {
const stats = await compile([
{
context: __dirname,
entry: "./fixtures/a"
},
{
context: __dirname,
entry: "./fixtures/b"
}
2025-07-18 20:28:16 +08:00
]);
expect(stats.toJson(false)).toMatchInlineSnapshot(`
Object {
"children": Array [
Object {
"name": undefined,
},
Object {
"name": undefined,
},
],
}
`);
expect(stats.toString(false)).toMatchInlineSnapshot('""');
});
it("should work with a string value", async () => {
const stats = await compile([
{
context: __dirname,
entry: "./fixtures/a"
},
{
context: __dirname,
entry: "./fixtures/b"
}
]);
expect(stats.toJson("none")).toMatchInlineSnapshot(`
Object {
"children": Array [
Object {
"name": undefined,
},
Object {
"name": undefined,
},
],
}
`);
expect(stats.toString("none")).toMatchInlineSnapshot('""');
});
it("should work with an object value", async () => {
const stats = await compile([
{
context: __dirname,
entry: "./fixtures/a"
},
{
context: __dirname,
entry: "./fixtures/b"
}
]);
expect(
stats.toJson({
all: false,
version: false,
errorsCount: true,
warningsCount: true
})
).toMatchInlineSnapshot(`
Object {
"children": Array [
Object {
"errorsCount": 0,
"name": undefined,
"warningsCount": 1,
},
Object {
"errorsCount": 0,
"name": undefined,
"warningsCount": 1,
},
],
"errorsCount": 0,
"warningsCount": 2,
}
`);
expect(
stats.toString({
all: false,
version: false,
errorsCount: true,
warningsCount: true
})
).toMatchInlineSnapshot(`
"webpack compiled with 1 warning
webpack compiled with 1 warning"
`);
});
it("should work with a boolean value for each children", async () => {
const stats = await compile([
{
context: __dirname,
entry: "./fixtures/a"
},
{
context: __dirname,
entry: "./fixtures/b"
}
]);
const statsOptions = {
children: [false, false]
};
expect(stats.toJson(statsOptions)).toMatchInlineSnapshot(`
Object {
"children": Array [
Object {
"name": undefined,
},
Object {
"name": undefined,
},
],
}
`);
expect(stats.toString(statsOptions)).toMatchInlineSnapshot('""');
});
it("should work with a string value for each children", async () => {
const stats = await compile([
{
context: __dirname,
entry: "./fixtures/a"
},
{
context: __dirname,
entry: "./fixtures/b"
}
]);
const statsOptions = {
children: ["none", "none"]
};
expect(stats.toJson(statsOptions)).toMatchInlineSnapshot(`
Object {
"children": Array [
Object {
"name": undefined,
},
Object {
"name": undefined,
},
],
}
`);
expect(stats.toString(statsOptions)).toMatchInlineSnapshot('""');
});
it("should work with an object value for each children", async () => {
const stats = await compile([
{
context: __dirname,
entry: "./fixtures/a"
},
{
context: __dirname,
entry: "./fixtures/b"
}
]);
const statsOptions = {
children: [
{
all: false,
publicPath: true,
version: false,
errorsCount: true,
warningsCount: true
},
{
all: false,
version: false,
errorsCount: true,
warningsCount: true
}
]
};
expect(stats.toJson(statsOptions)).toMatchInlineSnapshot(`
Object {
"children": Array [
Object {
"errorsCount": 0,
"name": undefined,
"publicPath": "auto",
"warningsCount": 1,
},
Object {
"errorsCount": 0,
"name": undefined,
"warningsCount": 1,
},
],
"errorsCount": 0,
"warningsCount": 2,
}
`);
expect(stats.toString(statsOptions)).toMatchInlineSnapshot(`
"PublicPath: auto
webpack compiled with 1 warning
webpack compiled with 1 warning"
`);
});
it("should work with an mixed values for each children", async () => {
const stats = await compile([
{
context: __dirname,
entry: "./fixtures/a"
},
{
context: __dirname,
entry: "./fixtures/b"
}
]);
const statsOptions = {
children: [
false,
{
all: false,
version: false,
errorsCount: true,
warningsCount: true
}
]
};
expect(stats.toJson(statsOptions)).toMatchInlineSnapshot(`
Object {
"children": Array [
Object {
"name": undefined,
},
Object {
"errorsCount": 0,
"name": undefined,
"warningsCount": 1,
},
],
}
`);
expect(stats.toString(statsOptions)).toMatchInlineSnapshot(
'"webpack compiled with 1 warning"'
);
});
});