@esmx/rspack
Version:
A high-performance Rspack integration for Esmx microfrontend framework, providing Module Linking and SSR capabilities.
106 lines (105 loc) • 3.89 kB
JavaScript
import { describe, expect, it } from "vitest";
import { PRESET_TARGETS, getTargetSetting } from "./target-setting.mjs";
describe("getTargetSetting", () => {
const buildTargets = ["client", "server", "node"];
describe("when setting is undefined", () => {
it("should return compatible preset for all build targets", () => {
buildTargets.forEach((buildTarget) => {
const result = getTargetSetting(void 0, buildTarget);
expect(result).toEqual(PRESET_TARGETS.compatible[buildTarget]);
});
});
});
describe("when setting is a string preset", () => {
it("should return compatible preset for all build targets", () => {
buildTargets.forEach((buildTarget) => {
const result = getTargetSetting("compatible", buildTarget);
expect(result).toEqual(PRESET_TARGETS.compatible[buildTarget]);
});
});
it("should return modern preset for all build targets", () => {
buildTargets.forEach((buildTarget) => {
const result = getTargetSetting("modern", buildTarget);
expect(result).toEqual(PRESET_TARGETS.modern[buildTarget]);
});
});
});
describe("when setting is a custom array", () => {
const customTargets = ["chrome>=90", "firefox>=80", "safari>=14"];
it("should return the custom array for all build targets", () => {
buildTargets.forEach((buildTarget) => {
const result = getTargetSetting(customTargets, buildTarget);
expect(result).toEqual(customTargets);
});
});
});
describe("when setting is an object with specific build targets", () => {
it("should return specified preset for configured build targets", () => {
const setting = {
client: "modern",
server: "compatible"
};
expect(getTargetSetting(setting, "client")).toEqual(
PRESET_TARGETS.modern.client
);
expect(getTargetSetting(setting, "server")).toEqual(
PRESET_TARGETS.compatible.server
);
});
it("should return compatible preset for unconfigured build targets", () => {
const setting = {
client: "modern"
};
expect(getTargetSetting(setting, "client")).toEqual(
PRESET_TARGETS.modern.client
);
expect(getTargetSetting(setting, "server")).toEqual(
PRESET_TARGETS.compatible.server
);
expect(getTargetSetting(setting, "node")).toEqual(
PRESET_TARGETS.compatible.node
);
});
it("should return custom array for configured build targets", () => {
const customClientTargets = ["chrome>=90", "firefox>=80"];
const customServerTargets = ["node>=18"];
const setting = {
client: customClientTargets,
server: customServerTargets
};
expect(getTargetSetting(setting, "client")).toEqual(
customClientTargets
);
expect(getTargetSetting(setting, "server")).toEqual(
customServerTargets
);
expect(getTargetSetting(setting, "node")).toEqual(
PRESET_TARGETS.compatible.node
);
});
it("should handle mixed preset and custom configurations", () => {
const setting = {
client: "modern",
server: ["node>=18"],
node: "compatible"
};
expect(getTargetSetting(setting, "client")).toEqual(
PRESET_TARGETS.modern.client
);
expect(getTargetSetting(setting, "server")).toEqual(["node>=18"]);
expect(getTargetSetting(setting, "node")).toEqual(
PRESET_TARGETS.compatible.node
);
});
});
describe("edge cases", () => {
it("should handle empty custom array", () => {
const result = getTargetSetting([], "client");
expect(result).toEqual([]);
});
it("should handle single item custom array", () => {
const result = getTargetSetting(["chrome>=90"], "client");
expect(result).toEqual(["chrome>=90"]);
});
});
});