import { flushPromises, type VueWrapper } from '@vue/test-utils' import { NSelect } from 'naive-ui' /** 展开真实折叠面板后再测试内部操作,避免对不可见控件进行断言。 */ export async function expandSections() { const tools = document.querySelector('[data-workspace-tools][aria-expanded="false"]') tools?.click() await flushPromises() for (let depth = 0; depth < 4; depth++) { const headers = document.querySelectorAll( '.n-collapse-item:not(.n-collapse-item--active) > .n-collapse-item__header .n-collapse-item__header-main' ) if (!headers.length) return headers.forEach(header => header.click()) await flushPromises() } } /** Naive Select 没有原生 select,通过公开事件模拟选项变化并保留业务守卫。 */ export function selectControl(wrapper: VueWrapper, attribute: string, value: string) { const select = wrapper.findAllComponents(NSelect).find(item => item.attributes(attribute) === value) if (!select) throw new Error('找不到选择框:' + value) return select }