Files
voiceon-character-admin/src/shared/mocks/__tests__/production-graph.test.ts
2026-07-27 23:23:36 +09:00

47 lines
1.5 KiB
TypeScript

import { mkdtempSync, readFileSync, readdirSync, rmSync, statSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { build } from "vite";
import { describe, expect, test } from "vitest";
describe("production mock graph", () => {
test("excludes the browser mock module from the production bundle", async () => {
// Given
const outDir = mkdtempSync(join(tmpdir(), "ai-character-admin-prod-"));
const previousNodeEnv = process.env.NODE_ENV;
try {
process.env.NODE_ENV = "production";
// When
await build({
build: { emptyOutDir: true, outDir },
configFile: "vite.config.ts",
logLevel: "silent",
mode: "production",
});
const outputFiles = collectFiles(outDir);
const output = outputFiles
.filter((filePath) => filePath.endsWith(".js"))
.map((filePath) => readFileSync(filePath, "utf8"))
.join("\n");
// Then
expect(outputFiles.some((filePath) => filePath.endsWith("mockServiceWorker.js"))).toBe(false);
expect(output).not.toContain("mockServiceWorker.js");
expect(output).not.toContain("startMockWorker");
} finally {
process.env.NODE_ENV = previousNodeEnv;
rmSync(outDir, { force: true, recursive: true });
}
});
});
function collectFiles(directory: string): readonly string[] {
return readdirSync(directory).flatMap((entry) => {
const path = join(directory, entry);
return statSync(path).isDirectory() ? collectFiles(path) : [path];
});
}