Files
workspace/code/fms/fms-vue/tests/views/user-power-drawer.spec.js
T
2026-09-20 22:05:20 +08:00

66 lines
2.4 KiB
JavaScript

/**
* 分配权限抽屉(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',
])
})
})