/** * 分配权限抽屉(UserPowerDrawer):头部结构。 * * 数据加载与保存由本组件负责(面板只读展示),测试只锁头部两件事: * 1. 头部不渲染标题:只有页签一行 + ui/Drawer 的关闭按钮,没有其它元素; * 2. 三个页签对应三张权限表的内容面板(切换页签不销毁,用 v-show 承载)。 * * 面板自身的规则由 user-power-panel.spec.js 覆盖(含「全授权 / 全禁用」),这里不重复。 */ import { describe, it, expect, beforeEach, vi } from 'vitest' import { mount, flushPromises } from '@vue/test-utils' import UserPowerDrawer from '@/views/system/user/UserPowerDrawer.vue' import { clearMessages } from '@/stores/i18n' vi.mock('@/services/api', () => ({ loadDataApi: vi.fn(), saveObjectApi: vi.fn(() => Promise.resolve({ code: 0, success: true })), })) import { loadDataApi } from '@/services/api' beforeEach(() => { localStorage.clear() sessionStorage.clear() clearMessages() loadDataApi.mockReset() loadDataApi.mockImplementation(() => Promise.resolve({ data: [] })) }) async function mountDrawer() { const wrapper = mount(UserPowerDrawer, { props: { open: true, user: { b_id: '001', b_name: '张三' } }, // Drawer 用 Teleport 到 body;打桩后内容留在原地,选择器才能命中 global: { stubs: { teleport: true } }, }) await flushPromises() return wrapper } describe('分配权限抽屉:头部', () => { it('头部只有页签一行:无标题、无批量按钮,关闭按钮由 ui/Drawer 提供', async () => { const wrapper = await mountDrawer() expect(wrapper.find('.fms-drawer-title').exists()).toBe(false) expect(wrapper.find('.fms-drawer-extra .tabs-nav').exists()).toBe(true) expect(wrapper.find('.fms-drawer-close').exists()).toBe(true) // 账号级批量按钮不在头部(在功能权限面板的工具栏里) expect(wrapper.find('.fms-drawer-header button.button').exists()).toBe(false) }) it('三个页签对应三张权限表的内容面板', async () => { const wrapper = await mountDrawer() expect(wrapper.findAll('.tabs-tab').map((el) => el.text())).toEqual([ '功能权限', '字段权限', '数据范围', ]) expect(wrapper.findAll('.power-pane').map((el) => el.attributes('data-pane'))).toEqual([ 'power', 'field', 'data', ]) }) })