diff --git a/tests/cases/32-contacts.test.ts b/tests/cases/32-contacts.test.ts index fd87921..6f8617b 100644 --- a/tests/cases/32-contacts.test.ts +++ b/tests/cases/32-contacts.test.ts @@ -272,6 +272,15 @@ describe('32-contacts — Contacts Vue 组件化', () => { expect(win.body.querySelector('.note-title')?.textContent).toBe('自定义') }) + // ⚠️ 关键回归测试:mount 后 store 必须可读取默认数据 + // 这是 FaceTime 等跨组件读取联系人的前提 + it('mount 后 store.get 可读取默认联系人', () => { + mount() + const data = store.get('contacts', []) + expect(data.length).toBeGreaterThanOrEqual(1) + expect(data[0].name).toBeTruthy() + }) + it('新增联系人后 store 更新', async () => { mount() const addBtn = win.body.querySelector('.fb-btn') as HTMLElement diff --git a/tests/cases/34-facetime.test.ts b/tests/cases/34-facetime.test.ts index 36a95d7..95dff2a 100644 --- a/tests/cases/34-facetime.test.ts +++ b/tests/cases/34-facetime.test.ts @@ -73,6 +73,28 @@ describe('34-facetime', () => { it('暴露 startCall', () => { m(); expect(typeof w.appState.startCall).toBe('function') }) it('startCall 呼叫', async () => { m(); w.appState.startCall(C[0]); await nextTick(); expect(document.querySelector('.ft-status')?.textContent).toContain('正在呼叫') }) + // --- integration: store 空时不预设数据,模拟真实首次打开 --- + describe('store 集成', () => { + it('store 有数据时显示联系人', () => { m(); expect(document.querySelector('.ft-cell')).toBeTruthy() }) + // ⚠️ 回归:真实流程 Contacts mount→persist→FaceTime mount 可读 + it('Contacts mount 后 FaceTime 可读取', async () => { + // 模拟真实流程:先 mount Contacts 写 store,再 mount FaceTime 读 + const ContactsComponent = (await import('../../src/apps/contacts/Contacts.vue')).default + const cEl = document.createElement('div'); cEl.className = 'window'; document.body.appendChild(cEl) + const cBody = document.createElement('div'); cBody.className = 'win-body'; cEl.appendChild(cBody) + const cWin = { id: 'ct', appId: 'contacts', el: cEl, body: cBody, timers: [], data: {} } + render(h(ContactsComponent, { win: cWin }), cBody) + await nextTick() + // 验证 Contacts 已 persist + const contacts = store.get('contacts', []) + expect(contacts.length).toBeGreaterThanOrEqual(1) + // FaceTime 应能读取 + render(null, w.body); m() + expect(document.querySelector('.ft-cell')).toBeTruthy() + render(null, cBody); cEl.remove() + }) + }) + // --- unmount --- it('卸载', () => { m(); render(null, w.body); expect(w.body.children.length).toBe(0) }) })