import { mount } from '@vue/test-utils'
import WdCellGroup from '@/uni_modules/wot-design-uni/components/wd-cell-group/wd-cell-group.vue'
import WdCell from '@/uni_modules/wot-design-uni/components/wd-cell/wd-cell.vue'
import { describe, test, expect, vi, beforeEach } from 'vitest'
import { pause } from '@/uni_modules/wot-design-uni/components/common/util'
describe('WdCellGroup', () => {
beforeEach(() => {
vi.clearAllMocks()
})
test('测试基本渲染 - 默认属性', () => {
const wrapper = mount(WdCellGroup)
expect(wrapper.classes()).toContain('wd-cell-group')
expect(wrapper.classes()).not.toContain('is-border') // 默认无边框
})
// 测试标题
test('测试标题渲染', () => {
const title = '分组标题'
const wrapper = mount(WdCellGroup, {
props: { title }
})
expect(wrapper.find('.wd-cell-group__title').exists()).toBe(true)
expect(wrapper.find('.wd-cell-group__left').text()).toBe(title)
})
// 测试值
test('测试值渲染', () => {
const value = '内容'
const wrapper = mount(WdCellGroup, {
props: { value }
})
expect(wrapper.find('.wd-cell-group__title').exists()).toBe(true)
expect(wrapper.find('.wd-cell-group__right').text()).toBe(value)
})
// 测试标题和值同时存在
test('测试同时渲染标题和值', () => {
const title = '分组标题'
const value = '内容'
const wrapper = mount(WdCellGroup, {
props: { title, value }
})
expect(wrapper.find('.wd-cell-group__title').exists()).toBe(true)
expect(wrapper.find('.wd-cell-group__left').text()).toBe(title)
expect(wrapper.find('.wd-cell-group__right').text()).toBe(value)
})
// 测试使用插槽
test('测试 useSlot 属性', () => {
const wrapper = mount(WdCellGroup, {
props: { useSlot: true }
})
expect(wrapper.find('.wd-cell-group__title').exists()).toBe(true)
})
// 测试插槽内容
test('测试默认插槽内容', () => {
const wrapper = mount(WdCellGroup, {
slots: {
default: '
自定义内容
'
}
})
expect(wrapper.find('.wd-cell-group__body').exists()).toBe(true)
expect(wrapper.find('.custom-content').exists()).toBe(true)
})
// 测试自定义标题插槽
test('测试自定义标题插槽', () => {
const wrapper = mount(WdCellGroup, {
props: { useSlot: true },
slots: {
title: '自定义标题
'
}
})
expect(wrapper.find('.wd-cell-group__title').exists()).toBe(true)
expect(wrapper.find('.wd-cell-group__left').exists()).toBe(true)
expect(wrapper.find('.custom-title').exists()).toBe(true)
})
// 测试自定义值插槽
test('测试自定义值插槽', () => {
const wrapper = mount(WdCellGroup, {
props: { useSlot: true },
slots: {
value: '自定义值
'
}
})
expect(wrapper.find('.wd-cell-group__title').exists()).toBe(true)
expect(wrapper.find('.wd-cell-group__right').exists()).toBe(true)
expect(wrapper.find('.custom-value').exists()).toBe(true)
})
// 测试标题插槽优先级
test('测试标题插槽优先级高于 title 属性', () => {
const title = '分组标题'
const wrapper = mount(WdCellGroup, {
props: { title },
slots: {
title: '自定义标题
'
}
})
expect(wrapper.find('.wd-cell-group__left').text()).not.toBe(title)
expect(wrapper.find('.custom-title').exists()).toBe(true)
})
// 测试值插槽优先级
test('测试值插槽优先级高于 value 属性', () => {
const value = '内容'
const wrapper = mount(WdCellGroup, {
props: { value },
slots: {
value: '自定义值
'
}
})
expect(wrapper.find('.wd-cell-group__right').text()).not.toBe(value)
expect(wrapper.find('.custom-value').exists()).toBe(true)
})
// 测试边框
test('测试带边框渲染', () => {
const wrapper = mount(WdCellGroup, {
props: { border: true }
})
expect(wrapper.classes()).toContain('is-border')
})
// 测试无边框
test('测试无边框渲染', () => {
const wrapper = mount(WdCellGroup, {
props: { border: false }
})
expect(wrapper.classes()).not.toContain('is-border')
})
// 测试自定义类名
test('测试应用自定义类名', () => {
const customClass = 'custom-group'
const wrapper = mount(WdCellGroup, {
props: { customClass }
})
expect(wrapper.classes()).toContain(customClass)
})
// 测试自定义样式
test('测试应用自定义样式', () => {
const customStyle = 'background: yellow;'
const wrapper = mount(WdCellGroup, {
props: { customStyle }
})
expect(wrapper.attributes('style')).toBe(customStyle)
})
// 测试不显示标题区域
test('测试无标题、值或 useSlot 时不渲染标题区域', () => {
const wrapper = mount(WdCellGroup)
expect(wrapper.find('.wd-cell-group__title').exists()).toBe(false)
})
// --- Border Inheritance Tests ---
test('测试单元格默认继承分组边框', async () => {
const wrapper = mount(WdCellGroup, {
props: { border: true },
slots: {
default: `
`
},
global: {
components: {
WdCell
}
}
})
await pause(100)
const cellWrapper = wrapper.findAllComponents(WdCell)
expect(cellWrapper[1].classes()).toContain('is-border')
})
test('测试分组无边框时单元格不继承边框', () => {
const wrapper = mount(WdCellGroup, {
props: { border: false }, // Group has no border
slots: {
default: ''
},
global: {
components: {
WdCell
}
}
})
const cellWrapper = wrapper.findComponent(WdCell)
expect(cellWrapper.classes()).not.toContain('is-border')
})
test('测试单元格边框覆盖分组边框 (单元格=false, 分组=true)', () => {
const wrapper = mount(WdCellGroup, {
props: { border: true }, // Group has border
slots: {
default: '' // Cell explicitly sets no border
},
global: {
components: {
WdCell
}
}
})
const cellWrapper = wrapper.findComponent(WdCell)
expect(cellWrapper.classes()).not.toContain('is-border')
})
test('测试单元格边框覆盖分组边框 (单元格=true, 分组=false)', () => {
const wrapper = mount(WdCellGroup, {
props: { border: false }, // Group has no border
slots: {
default: '' // Cell explicitly sets border
},
global: {
components: {
WdCell
}
}
})
const cellWrapper = wrapper.findComponent(WdCell)
expect(cellWrapper.classes()).toContain('is-border')
})
})