webpack/test/Chunk.test.js

167 lines
4.7 KiB
JavaScript
Raw Permalink Normal View History

2017-02-14 18:28:32 +08:00
/* globals describe, it, beforeEach */
2017-01-17 23:40:00 +08:00
"use strict";
2017-01-17 23:40:00 +08:00
const should = require("should");
2017-02-14 18:28:32 +08:00
const sinon = require("sinon");
2017-01-17 23:40:00 +08:00
const Chunk = require("../lib/Chunk");
2017-01-17 23:40:00 +08:00
describe("Chunk", () => {
let ChunkInstance;
2017-01-17 23:40:00 +08:00
beforeEach(() => ChunkInstance = new Chunk("chunk-test", "module-test", "loc-test"));
it("should have debugId more than 999", () => should(ChunkInstance.debugId).be.above(999));
2017-01-17 23:40:00 +08:00
it("returns a string with modules information", () => should(ChunkInstance.toString()).be.exactly("Chunk[]"));
it("should have origins based in constructor information", () =>
should(ChunkInstance.origins[0]).be.eql({
module: "module-test",
loc: "loc-test",
name: "chunk-test"
2017-01-17 23:40:00 +08:00
}));
2017-01-17 23:40:00 +08:00
it("should not be the initial instance", () => should(ChunkInstance.isInitial()).be.false());
2017-01-17 23:40:00 +08:00
describe("entry", () => {
it("returns an error if get entry", () =>
should(() => {
2017-02-14 18:28:32 +08:00
ChunkInstance.entry;
2017-01-17 23:40:00 +08:00
}).throw("Chunk.entry was removed. Use hasRuntime()"));
2017-01-17 23:40:00 +08:00
it("returns an error if set an entry", () =>
should(() => {
ChunkInstance.entry = 10;
2017-01-17 23:40:00 +08:00
}).throw("Chunk.entry was removed. Use hasRuntime()"));
});
2017-01-17 23:40:00 +08:00
describe("initial", () => {
it("returns an error if get initial", () =>
should(() => {
2017-02-14 18:28:32 +08:00
ChunkInstance.initial;
2017-01-17 23:40:00 +08:00
}).throw("Chunk.initial was removed. Use isInitial()"));
2017-01-17 23:40:00 +08:00
it("returns an error if set an initial", () =>
should(() => {
ChunkInstance.initial = 10;
2017-01-17 23:40:00 +08:00
}).throw("Chunk.initial was removed. Use isInitial()"));
});
2017-01-17 23:40:00 +08:00
describe("hasRuntime", () => {
it("returns false", () => should(ChunkInstance.hasRuntime()).be.false());
});
2017-01-17 23:40:00 +08:00
describe("isEmpty", () => {
it("should NOT have any module by default", () => should(ChunkInstance.isEmpty()).be.true());
});
2017-01-17 23:40:00 +08:00
describe("size", () => {
it("should NOT have any module by default", () =>
should(ChunkInstance.size({
chunkOverhead: 10,
entryChunkMultiplicator: 2
2017-01-17 23:40:00 +08:00
})).be.exactly(10));
});
2017-01-17 23:40:00 +08:00
describe("checkConstraints", () => {
it("throws an error", () =>
should(() => {
ChunkInstance.checkConstraints();
2017-01-17 23:40:00 +08:00
}).not.throw(/checkConstraints/));
});
2017-01-17 23:40:00 +08:00
describe("canBeIntegrated", () => {
it("returns `false` if other object is initial", () => {
const other = {
isInitial: () => true
};
should(ChunkInstance.canBeIntegrated(other)).be.false();
});
2017-01-17 23:40:00 +08:00
it("returns `true` if other object and chunk instance are NOT initial", () => {
const other = {
isInitial: () => false
};
should(ChunkInstance.canBeIntegrated(other)).be.true();
});
});
2017-02-14 18:28:32 +08:00
describe("removeModule", function() {
let module;
let removeChunkSpy;
beforeEach(function() {
removeChunkSpy = sinon.spy();
module = {
removeChunk: removeChunkSpy
};
});
describe("and the chunk does not contain this module", function() {
it("returns false", function() {
ChunkInstance.removeModule(module).should.eql(false);
});
});
describe("and the chunk does contain this module", function() {
beforeEach(function() {
ChunkInstance.modules = [module];
});
it("calls module.removeChunk with itself and returns true", function() {
ChunkInstance.removeModule(module).should.eql(true);
removeChunkSpy.callCount.should.eql(1);
removeChunkSpy.args[0][0].should.eql(ChunkInstance);
});
});
});
describe("removeChunk", function() {
let chunk;
let removeParentSpy;
beforeEach(function() {
removeParentSpy = sinon.spy();
chunk = {
removeParent: removeParentSpy
};
});
describe("and the chunk does not contain this chunk", function() {
it("returns false", function() {
ChunkInstance.removeChunk(chunk).should.eql(false);
});
});
describe("and the chunk does contain this module", function() {
beforeEach(function() {
ChunkInstance.chunks = [chunk];
});
it("calls module.removeChunk with itself and returns true", function() {
ChunkInstance.removeChunk(chunk).should.eql(true);
removeParentSpy.callCount.should.eql(1);
removeParentSpy.args[0][0].should.eql(ChunkInstance);
});
});
});
describe("removeParent", function() {
let chunk;
let removeChunkSpy;
beforeEach(function() {
removeChunkSpy = sinon.spy();
chunk = {
removeChunk: removeChunkSpy
};
});
describe("and the chunk does not contain this chunk", function() {
it("returns false", function() {
ChunkInstance.removeParent(chunk).should.eql(false);
});
});
describe("and the chunk does contain this module", function() {
beforeEach(function() {
ChunkInstance.parents = [chunk];
});
it("calls module.removeChunk with itself and returns true", function() {
ChunkInstance.removeParent(chunk).should.eql(true);
removeChunkSpy.callCount.should.eql(1);
removeChunkSpy.args[0][0].should.eql(ChunkInstance);
});
});
});
});