20260903221055

This commit is contained in:
oneao committed 2026-09-03 22:10:55 +08:00
1 parent 3d4e2c7413
commit 0928437c67
46 files changed
+2121 -1643

No files matched your search

@@ -11,7 +11,9 @@ registerFeature(useAreaSelection)
beforeAll(() => {
Object.defineProperty(HTMLElement.prototype, 'clientWidth', {
configurable: true,
get() { return 5000 }
get() {
return 5000
},
})
})
@@ -22,9 +24,17 @@ vi.mock('@/services/api', () => ({
describeApi: vi.fn(),
}))
const fields = [
{ b_id: '1', b_name: '姓名', b_field: 'name', b_type: 'input', b_canuse: 1 }
]
const fields = [{ b_id: '1', b_name: '姓名', b_field: 'name', b_type: 'input', b_canuse: 1 }]
/** 受控 rows 模型:把最后一次 update:rows 回灌到 props,模拟父级 v-model */
async function syncRows(wrapper) {
const events = wrapper.emitted('update:rows')
if (events && events.length) {
await wrapper.setProps({ rows: events.at(-1)[0] })
}
await nextTick()
await new Promise((r) => setTimeout(r, 20))
}
describe('module-management 删除(单个无确认弹窗 + 批量)', () => {
beforeEach(() => setActivePinia(createPinia()))
@@ -63,14 +73,20 @@ describe('module-management 删除(单个无确认弹窗 + 批量)', () => {
await settle()
}
async function clickToolbarAdd(wrapper, label) {
const btn = wrapper.findAll('button').find((b) => b.text().includes(label))
expect(btn, `${label} 按钮应存在`).toBeTruthy()
await btn.trigger('click')
await settle()
}
it('查询面板:单个删除不弹弹窗且行被移除', async () => {
const wrapper = mount(ModuleQueryConfigPanel, {
props: { moduleId: 'm1', queryConfig: [], fields, loading: false },
attachTo: document.body,
})
await settle()
await wrapper.findAll('button').find((b) => b.text().includes('新增查询条件')).trigger('click')
await settle()
await clickToolbarAdd(wrapper, '新增查询条件')
expect(wrapper.findAll('.stk-tbody-main tr').length).toBe(1)
await clickDelete(wrapper)
await checkNoModal()
@@ -85,8 +101,7 @@ describe('module-management 删除(单个无确认弹窗 + 批量)', () => {
})
await settle()
for (let i = 0; i < 2; i++) {
await wrapper.findAll('button').find((b) => b.text().includes('新增查询条件')).trigger('click')
await settle()
await clickToolbarAdd(wrapper, '新增查询条件')
}
expect(wrapper.findAll('.stk-tbody-main tr').length).toBe(2)
await selectRowCheckbox(wrapper, 0)
@@ -97,10 +112,9 @@ describe('module-management 删除(单个无确认弹窗 + 批量)', () => {
wrapper.unmount()
})
it('多语言面板:单个删除不弹弹窗且行被移除', async () => {
it('多语言面板:新增/单个删除通过 update:rows 上报且不弹弹窗', async () => {
const wrapper = mount(ModuleI18nPanel, {
props: {
moduleId: 'm1',
rows: [],
languages: [
{ code: 'zh-CN', name: '简体中文', default: true },
@@ -111,20 +125,22 @@ describe('module-management 删除(单个无确认弹窗 + 批量)', () => {
attachTo: document.body,
})
await settle()
await wrapper.findAll('button').find((b) => b.text().includes('新增多语言')).trigger('click')
await settle()
const before = wrapper.findAll('.stk-tbody-main tr').length
expect(before).toBeGreaterThan(0)
await clickToolbarAdd(wrapper, '新增多语言')
await syncRows(wrapper)
const rowsAfterAdd = wrapper.props('rows')
expect(rowsAfterAdd.length).toBe(1)
expect(rowsAfterAdd[0]._managedId, '手动新增行不受管,可删除').toBeUndefined()
await clickDelete(wrapper)
await syncRows(wrapper)
await checkNoModal()
expect(wrapper.findAll('.stk-tbody-main tr').length, '单个删除后行应减少').toBe(before - 1)
expect(wrapper.props('rows').length, '单个删除后行应减少').toBe(0)
wrapper.unmount()
})
it('多语言面板:批量删除选中多行', async () => {
it('多语言面板:批量删除选中多行通过 update:rows 上报且不弹弹窗', async () => {
const wrapper = mount(ModuleI18nPanel, {
props: {
moduleId: 'm1',
rows: [],
languages: [
{ code: 'zh-CN', name: '简体中文', default: true },
@@ -135,18 +151,17 @@ describe('module-management 删除(单个无确认弹窗 + 批量)', () => {
attachTo: document.body,
})
await settle()
const before = wrapper.findAll('.stk-tbody-main tr').length
for (let i = 0; i < 2; i++) {
await wrapper.findAll('button').find((b) => b.text().includes('新增多语言')).trigger('click')
await settle()
await clickToolbarAdd(wrapper, '新增多语言')
await syncRows(wrapper)
}
const total = wrapper.findAll('.stk-tbody-main tr').length
expect(total).toBeGreaterThanOrEqual(before + 2)
expect(wrapper.props('rows').length).toBe(2)
await selectRowCheckbox(wrapper, 0)
await selectRowCheckbox(wrapper, 1)
await clickToolbarBatch(wrapper)
await syncRows(wrapper)
await checkNoModal()
expect(wrapper.findAll('.stk-tbody-main tr').length, '批量删除后应只剩受管行').toBe(before)
expect(wrapper.props('rows').length, '批量删除后应无行').toBe(0)
wrapper.unmount()
})
})
})