webpack/test/MultiCompiler.test.js

160 lines
3.9 KiB
JavaScript

"use strict";
const path = require("path");
const { createFsFromVolume, Volume } = require("memfs");
const webpack = require("..");
const createMultiCompiler = () => {
const compiler = webpack([
{
context: path.join(__dirname, "fixtures"),
entry: "./a.js"
},
{
context: path.join(__dirname, "fixtures"),
entry: "./b.js"
}
]);
compiler.outputFileSystem = createFsFromVolume(new Volume());
return compiler;
};
describe("MultiCompiler", function () {
jest.setTimeout(20000);
it("should trigger 'run' for each child compiler", done => {
const compiler = createMultiCompiler();
let called = 0;
compiler.hooks.run.tap("MultiCompiler test", () => called++);
compiler.run(err => {
if (err) {
throw err;
} else {
expect(called).toBe(2);
done();
}
});
});
it("should trigger 'watchRun' for each child compiler", done => {
const compiler = createMultiCompiler();
let called = 0;
compiler.hooks.watchRun.tap("MultiCompiler test", () => called++);
const watcher = compiler.watch(1000, err => {
if (err) {
throw err;
} else {
watcher.close();
expect(called).toBe(2);
done();
}
});
});
it("should not be run twice at a time (run)", function (done) {
const compiler = createMultiCompiler();
compiler.run((err, stats) => {
if (err) return done(err);
});
compiler.run((err, stats) => {
if (err) return done();
});
});
it("should not be run twice at a time (watch)", function (done) {
const compiler = createMultiCompiler();
const watcher = compiler.watch({}, (err, stats) => {
if (err) return done(err);
});
compiler.watch({}, (err, stats) => {
if (err) return watcher.close(done);
});
});
it("should not be run twice at a time (run - watch)", function (done) {
const compiler = createMultiCompiler();
compiler.run((err, stats) => {
if (err) return done(err);
});
compiler.watch({}, (err, stats) => {
if (err) return done();
});
});
it("should not be run twice at a time (watch - run)", function (done) {
const compiler = createMultiCompiler();
let watcher;
watcher = compiler.watch({}, (err, stats) => {
if (err) return done(err);
});
compiler.run((err, stats) => {
if (err) return watcher.close(done);
});
});
it("should not be run twice at a time (instance cb)", function (done) {
const compiler = webpack(
{
context: __dirname,
mode: "production",
entry: "./c",
output: {
path: "/",
filename: "bundle.js"
}
},
() => {}
);
compiler.outputFileSystem = createFsFromVolume(new Volume());
compiler.run((err, stats) => {
if (err) return done();
});
});
it("should run again correctly after first compilation", function (done) {
const compiler = createMultiCompiler();
compiler.run((err, stats) => {
if (err) return done(err);
compiler.run((err, stats) => {
if (err) return done(err);
done();
});
});
});
it("should watch again correctly after first compilation", function (done) {
const compiler = createMultiCompiler();
compiler.run((err, stats) => {
if (err) return done(err);
let watcher;
watcher = compiler.watch({}, (err, stats) => {
if (err) return done(err);
watcher.close(done);
});
});
});
it("should run again correctly after first closed watch", function (done) {
const compiler = createMultiCompiler();
const watching = compiler.watch({}, (err, stats) => {
if (err) return done(err);
});
watching.close(() => {
compiler.run((err, stats) => {
if (err) return done(err);
done();
});
});
});
it("should watch again correctly after first closed watch", function (done) {
const compiler = createMultiCompiler();
const watching = compiler.watch({}, (err, stats) => {
if (err) return done(err);
});
watching.close(() => {
let watcher;
watcher = compiler.watch({}, (err, stats) => {
if (err) return done(err);
watcher.close(done);
});
});
});
});