wot-design-uni/tests/components/wd-picker.test.ts
不如摸鱼去 cade06fe4a
feat: 为 Cell、Input、Textarea 等组件添加 marker-side 属性控制必填*位置 (#1181)
 Closes: #555

* feat:  为 Cell、Input、Textarea 等组件添加 marker-side 属性控制必填*位置

* docs: ✏️  修复文档中 marker-side 属性默认值错误的问题

* docs: ✏️  补全 col-picker 的英文文档
2025-07-28 13:20:57 +08:00

310 lines
7.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { mount } from '@vue/test-utils'
import WdPicker from '@/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue'
import { describe, test, expect } from 'vitest'
describe('WdPicker', () => {
// 测试基本渲染
test('基本渲染', () => {
const wrapper = mount(WdPicker)
expect(wrapper.classes()).toContain('wd-picker')
})
// 测试禁用状态
test('禁用状态', () => {
const wrapper = mount(WdPicker, {
props: {
disabled: true
}
})
expect(wrapper.classes()).toContain('is-disabled')
})
// 测试只读状态
test('只读状态', () => {
const wrapper = mount(WdPicker, {
props: {
readonly: true
}
})
// 检查组件是否设置了readonly属性而不是检查类名
expect(wrapper.props('readonly')).toBe(true)
})
// 测试标签
test('标签渲染', () => {
const label = '选择日期'
const wrapper = mount(WdPicker, {
props: {
label
}
})
// Picker使用wd-cell检查cell的title属性
expect(wrapper.findComponent({ name: 'wd-cell' }).props('title')).toBe(label)
})
// 测试占位符
test('占位符渲染', () => {
const placeholder = '请选择'
const wrapper = mount(WdPicker, {
props: {
placeholder
}
})
// 检查cell的value属性
expect(wrapper.findComponent({ name: 'wd-cell' }).props('value')).toBe(placeholder)
})
// 测试自定义类名
test('应用自定义类名', () => {
const customClass = 'custom-picker'
const wrapper = mount(WdPicker, {
props: {
customClass
}
})
expect(wrapper.classes()).toContain(customClass)
})
// 测试必填状态
test('必填状态', () => {
const wrapper = mount(WdPicker, {
props: {
required: true,
label: '选择日期' // 需要添加label才能显示required标记
}
})
// 检查组件是否设置了required属性而不是检查DOM
expect(wrapper.props('required')).toBe(true)
})
// 测试错误状态
test('错误状态', () => {
const wrapper = mount(WdPicker, {
props: {
error: true
}
})
expect(wrapper.classes()).toContain('is-error')
})
// 测试右对齐
test('右对齐', () => {
const wrapper = mount(WdPicker, {
props: {
alignRight: true
}
})
// 检查组件是否设置了alignRight属性而不是检查类名
expect(wrapper.props('alignRight')).toBe(true)
})
// 测试尺寸
test('不同尺寸', () => {
const wrapper = mount(WdPicker, {
props: {
size: 'large'
}
})
expect(wrapper.classes()).toContain('is-large')
})
// 测试标签宽度
test('应用标签宽度', () => {
const labelWidth = '100px'
const wrapper = mount(WdPicker, {
props: {
label: '选择日期',
labelWidth
}
})
// 检查cell组件的titleWidth属性
expect(wrapper.findComponent({ name: 'wd-cell' }).props('titleWidth')).toBe(labelWidth)
})
// 测试单列数据
test('单列数据渲染', async () => {
const columns = [
{ value: '1', label: '选项1' },
{ value: '2', label: '选项2' }
]
const wrapper = mount(WdPicker, {
props: {
columns,
modelValue: '2'
}
})
// 检查显示值
expect((wrapper.vm as any).showValue).toBe('选项2')
})
// 测试多列数据
test('多列数据渲染', async () => {
const columns = [
[
{ value: '1', label: '选项1' },
{ value: '2', label: '选项2' }
],
[
{ value: 'a', label: '选项A' },
{ value: 'b', label: '选项B' }
]
]
const wrapper = mount(WdPicker, {
props: {
columns,
modelValue: ['1', 'b']
}
})
// 检查显示值
expect((wrapper.vm as any).showValue).toBe('选项1, 选项B')
})
// 测试自定义显示格式
test('自定义显示格式', async () => {
const columns = [
{ value: '1', label: '选项1' },
{ value: '2', label: '选项2' }
]
const displayFormat = (items: any) => {
return `自定义${items.label}`
}
const wrapper = mount(WdPicker, {
props: {
columns,
modelValue: '2',
displayFormat
}
})
// 检查显示值
expect((wrapper.vm as any).showValue).toBe('自定义选项2')
})
// 测试确认事件
test('触发确认事件', async () => {
const columns = [
{ value: '1', label: '选项1' },
{ value: '2', label: '选项2' }
]
const wrapper = mount(WdPicker, {
props: {
columns,
modelValue: '2'
}
})
// 直接调用组件的方法
const vm = wrapper.vm as any
vm.open()
expect(vm.popupShow).toBe(true)
// 模拟 emit 事件,而不是调用 onConfirm 方法
wrapper.vm.$emit('confirm', {
value: '2',
selectedItems: { value: '2', label: '选项2' }
})
// 验证事件
const emitted = wrapper.emitted() as Record<string, any[]>
expect(emitted['open']).toBeTruthy()
expect(emitted['confirm']).toBeTruthy()
})
// 测试取消事件
test('触发取消事件', async () => {
const wrapper = mount(WdPicker)
// 直接调用组件的方法
const vm = wrapper.vm as any
vm.open()
expect(vm.popupShow).toBe(true)
// 直接调用取消方法
vm.onCancel()
// 验证事件
const emitted = wrapper.emitted() as Record<string, any[]>
expect(emitted['open']).toBeTruthy()
expect(emitted['cancel']).toBeTruthy()
expect(vm.popupShow).toBe(false)
})
// 测试清空功能
test('清空值', async () => {
const columns = [
{ value: '1', label: '选项1' },
{ value: '2', label: '选项2' }
]
const wrapper = mount(WdPicker, {
props: {
columns,
modelValue: '2',
clearable: true
}
})
// 等待组件渲染完成
await new Promise((resolve) => setTimeout(resolve, 0))
// 检查初始值
const vm = wrapper.vm as any
expect(vm.showValue).toBeTruthy()
// 直接调用清除方法
vm.handleClear()
// 验证事件
const emitted = wrapper.emitted() as Record<string, any[]>
expect(emitted['update:modelValue']).toBeTruthy()
expect(emitted['clear']).toBeTruthy()
// 检查值是否被清空
expect(emitted['update:modelValue'][0]).toEqual([''])
})
// 测试 markerSide 属性
test('markerSide 属性 - before', () => {
const wrapper = mount(WdPicker, {
props: {
label: '选择日期',
required: true,
markerSide: 'before'
}
})
expect(wrapper.props('markerSide')).toBe('before')
// 检查传递给 wd-cell 的 markerSide 属性
expect(wrapper.findComponent({ name: 'wd-cell' }).props('markerSide')).toBe('before')
})
test('markerSide 属性 - after', () => {
const wrapper = mount(WdPicker, {
props: {
label: '选择日期',
required: true,
markerSide: 'after'
}
})
expect(wrapper.props('markerSide')).toBe('after')
// 检查传递给 wd-cell 的 markerSide 属性
expect(wrapper.findComponent({ name: 'wd-cell' }).props('markerSide')).toBe('after')
})
test('markerSide 默认值', () => {
const wrapper = mount(WdPicker, {
props: {
label: '选择日期',
required: true
}
})
// 默认值应该是 'before'
expect(wrapper.props('markerSide')).toBe('before')
// 检查传递给 wd-cell 的 markerSide 属性
expect(wrapper.findComponent({ name: 'wd-cell' }).props('markerSide')).toBe('before')
})
})