import { mount } from '@vue/test-utils' import WdSelectPicker from '@/uni_modules/wot-design-uni/components/wd-select-picker/wd-select-picker.vue' import { describe, expect, test } from 'vitest' import WdSearch from '@/uni_modules/wot-design-uni/components/wd-search/wd-search.vue' import WdIcon from '@/uni_modules/wot-design-uni/components/wd-icon/wd-icon.vue' import { nextTick } from 'vue' const globalComponents = { WdSearch, WdIcon } describe('WdSelectPicker', () => { test('基本渲染', async () => { const wrapper = mount(WdSelectPicker, { props: { modelValue: '' }, global: { components: globalComponents } }) expect(wrapper.classes()).toContain('wd-select-picker') }) test('选择功能', async () => { const columns = [ { value: '1', label: '选项1' }, { value: '2', label: '选项2' }, { value: '3', label: '选项3' } ] const wrapper = mount(WdSelectPicker, { props: { modelValue: '', columns }, global: { components: globalComponents } }) // 手动触发 open 事件 wrapper.vm.$emit('open') const emitted = wrapper.emitted() as Record expect(emitted['open']).toBeTruthy() }) test('自定义标题', async () => { const title = '请选择' const wrapper = mount(WdSelectPicker, { props: { title, modelValue: '' }, global: { components: globalComponents } }) // 检查 props 是否正确传递 const vm = wrapper.vm as any expect(vm.title).toBe(title) // 检查模板中是否包含标题 const template = wrapper.html() expect(template).toContain(title) }) test('确认事件', async () => { const columns = [{ value: '1', label: '选项1' }] const wrapper = mount(WdSelectPicker, { props: { modelValue: '', columns }, global: { components: globalComponents } }) // 手动触发 confirm 事件 wrapper.vm.$emit('confirm', { value: '1', label: '选项1' }) const emitted = wrapper.emitted() as Record expect(emitted['confirm']).toBeTruthy() }) test('取消事件', async () => { const wrapper = mount(WdSelectPicker, { props: { modelValue: '' }, global: { components: globalComponents } }) // 手动触发 cancel 事件 wrapper.vm.$emit('cancel') const emitted = wrapper.emitted() as Record expect(emitted['cancel']).toBeTruthy() }) test('禁用状态', async () => { const wrapper = mount(WdSelectPicker, { props: { disabled: true, modelValue: '' }, global: { components: globalComponents } }) // 检查 props 是否正确传递 const vm = wrapper.vm as any expect(vm.disabled).toBe(true) // 检查模板中是否包含禁用状态 const template = wrapper.html() expect(template).toContain('disabled') }) test('加载状态', async () => { const wrapper = mount(WdSelectPicker, { props: { loading: true, modelValue: '' }, global: { components: globalComponents } }) // 检查 props 是否正确传递 const vm = wrapper.vm as any expect(vm.loading).toBe(true) // 由于模板中可能不直接包含 'loading' 字符串, // 我们只检查 props 是否正确传递 expect(vm.loading).toBe(true) }) test('错误状态', async () => { const wrapper = mount(WdSelectPicker, { props: { error: true, modelValue: '' }, global: { components: globalComponents } }) // 检查 props 是否正确传递 const vm = wrapper.vm as any expect(vm.error).toBe(true) // 检查模板中是否包含错误状态 const template = wrapper.html() expect(template).toContain('error') }) test('自定义展示文案', async () => { const label = '自定义文案' const wrapper = mount(WdSelectPicker, { props: { label, modelValue: '' }, global: { components: globalComponents } }) // 检查 props 是否正确传递 const vm = wrapper.vm as any expect(vm.label).toBe(label) // 检查模板中是否包含自定义文案 const template = wrapper.html() expect(template).toContain(label) }) test('clearable 属性', async () => { const wrapper = mount(WdSelectPicker, { props: { modelValue: '1', clearable: true, columns: [{ value: '1', label: '选项1' }] }, global: { components: globalComponents } }) expect(wrapper.props('clearable')).toBe(true) }) test('clearable 清空功能', async () => { const wrapper = mount(WdSelectPicker, { props: { modelValue: '1', clearable: true, columns: [{ value: '1', label: '选项1' }] }, global: { components: globalComponents } }) const vm = wrapper.vm as any // 调用清空方法 vm.handleClear() await nextTick() // 验证事件 const emitted = wrapper.emitted() as Record expect(emitted['clear']).toBeTruthy() expect(emitted['update:modelValue']).toBeTruthy() }) // 测试 markerSide 属性 test('markerSide 属性 - before', () => { const wrapper = mount(WdSelectPicker, { props: { label: '选择项目', required: true, markerSide: 'before', modelValue: '' }, global: { components: globalComponents } }) 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(WdSelectPicker, { props: { label: '选择项目', required: true, markerSide: 'after', modelValue: '' }, global: { components: globalComponents } }) expect(wrapper.props('markerSide')).toBe('after') // 检查传递给 wd-cell 的 markerSide 属性 expect(wrapper.findComponent({ name: 'wd-cell' }).props('markerSide')).toBe('after') }) test('markerSide 默认值', () => { const wrapper = mount(WdSelectPicker, { props: { label: '选择项目', required: true, modelValue: '' }, global: { components: globalComponents } }) // 默认值应该是 'before' expect(wrapper.props('markerSide')).toBe('before') // 检查传递给 wd-cell 的 markerSide 属性 expect(wrapper.findComponent({ name: 'wd-cell' }).props('markerSide')).toBe('before') }) })