feat(ai-character): Mock Preview 모드 구현
This commit is contained in:
46
src/shared/mocks/__tests__/production-graph.test.ts
Normal file
46
src/shared/mocks/__tests__/production-graph.test.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
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];
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user