import { describe, expect, it, vi } from "vitest"; import { reactive } from "vue"; import { ElMessage } from "element-plus"; import { useDrawerDirtyGuard } from "./drawerDirtyGuard"; vi.mock("element-plus", () => ({ ElMessage: { warning: vi.fn(), }, })); describe("useDrawerDirtyGuard", () => { it("allows drawer close when the form has no changes", () => { const form = reactive({ name: "设备A", status: "启用" }); const guard = useDrawerDirtyGuard(() => form); const done = vi.fn(); guard.syncBaseline(); guard.beforeClose(done); expect(done).toHaveBeenCalledTimes(1); expect(ElMessage.warning).not.toHaveBeenCalled(); }); it("blocks drawer close when the form has unsaved changes", () => { const form = reactive({ name: "设备A", status: "启用" }); const guard = useDrawerDirtyGuard(() => form); const done = vi.fn(); guard.syncBaseline(); form.name = "设备B"; guard.beforeClose(done); expect(done).not.toHaveBeenCalled(); expect(ElMessage.warning).toHaveBeenCalledWith("请先保存或取消编辑"); }); });