diff --git a/src/__tests__/siteSetting.spec.ts b/src/__tests__/siteSetting.spec.ts index 6f90209..4fec090 100644 --- a/src/__tests__/siteSetting.spec.ts +++ b/src/__tests__/siteSetting.spec.ts @@ -297,3 +297,33 @@ describe("SiteSetting 编辑模式(site/setting/:id,docs/20 F1 7 Tab)", () expect(config.home_layout).toBeTruthy(); // 其他 Tab 键不受影响 }); }); + +describe("SiteSetting 假脏防护(docs/20 返工 #2)", () => { + it("冷加载不标脏:7 个 Tab 标题均无 ●(种值触发的 watcher 落在 seeding 窗口内)", async () => { + routeMock.params = { id: "1" }; + const el = mountPage(); + await flush(); + + const labels = Array.from(el.querySelectorAll(".ivu-tabs-tab")).map(t => t.textContent!.trim()); + expect(labels.length).toBe(7); + labels.forEach(t => expect(t.includes("●")).toBe(false)); + }); + + it("真实编辑才标脏:改站点名称 → 基本信息 ●;保存成功后 ● 消失", async () => { + routeMock.params = { id: "1" }; + const el = mountPage(); + await flush(); + const labels = () => Array.from(el.querySelectorAll(".ivu-tabs-tab")).map(t => t.textContent!.trim()); + + const nameInput = el.querySelector('input[placeholder="如 XX学校门户网站"]')!; + setInputValue(nameInput, "改名后的门户"); + await flush(); + expect(labels().find(t => t.includes("基本信息"))!.includes("●")).toBe(true); + + const saveBtn = [...el.querySelectorAll("button")].find(b => b.textContent?.includes("保存基本信息"))!; + saveBtn.dispatchEvent(new MouseEvent("click", { bubbles: true })); + await flush(); + expect(mocks.siteSave).toHaveBeenCalledTimes(1); + expect(labels().find(t => t.includes("基本信息"))!.includes("●")).toBe(false); + }); +}); diff --git a/src/views/cms/SiteSetting.vue b/src/views/cms/SiteSetting.vue index 5a10bea..227236f 100644 --- a/src/views/cms/SiteSetting.vue +++ b/src/views/cms/SiteSetting.vue @@ -1,5 +1,5 @@