import { mount } from '@vue/test-utils' import WdRadio from '@/uni_modules/wot-design-uni/components/wd-radio/wd-radio.vue' import WdRadioGroup from '@/uni_modules/wot-design-uni/components/wd-radio-group/wd-radio-group.vue' import { describe, test, expect } from 'vitest' describe('单选框组件', () => { // 测试基本渲染 test('使用默认属性渲染单选框', () => { const wrapper = mount(WdRadio, { props: { value: '1' }, slots: { default: '选项1' } }) expect(wrapper.classes()).toContain('wd-radio') expect(wrapper.find('.wd-radio__shape').exists()).toBe(true) expect(wrapper.find('.wd-radio__label').exists()).toBe(true) expect(wrapper.text()).toBe('选项1') }) // 测试选中状态 test('与单选框组一起使用时的选中状态', async () => { const wrapper = mount({ components: { WdRadioGroup, WdRadio }, template: ` 选项1 选项2 `, data() { return { value: '1' } } }) const radios = wrapper.findAllComponents(WdRadio) // 第一个选项应该被选中 expect(radios[0].classes()).toContain('is-checked') expect(radios[1].classes()).not.toContain('is-checked') // 更新数据模型 await wrapper.setData({ value: '2' }) // 第二个选项应该被选中 expect(radios[0].classes()).not.toContain('is-checked') expect(radios[1].classes()).toContain('is-checked') }) // 测试自定义颜色 test('渲染自定义颜色', async () => { const checkedColor = '#ff0000' const wrapper = mount({ components: { WdRadioGroup, WdRadio }, template: ` 选项1 `, data() { return { value: '1', checkedColor } } }) const radio = wrapper.findComponent(WdRadio) // 检查组件是否正确接收了颜色属性 const radioShape = radio.find('.wd-radio__shape') const style = radioShape.attributes('style') expect(style).toBeDefined() expect(style).toContain('color') // 颜色值可能会被转换为 RGB 格式,所以我们只检查是否包含 'color' }) // 测试禁用状态 test('渲染禁用状态', async () => { const wrapper = mount({ components: { WdRadioGroup, WdRadio }, template: ` 选项1 选项2 `, data() { return { value: '1' } } }) const radios = wrapper.findAllComponents(WdRadio) // 第一个选项应该被禁用 expect(radios[0].classes()).toContain('is-disabled') expect(radios[1].classes()).not.toContain('is-disabled') // 尝试点击被禁用的选项,不应该改变选中状态 await radios[0].trigger('click') expect(wrapper.vm.value).toBe('1') // 值不变 // 点击未禁用的选项,应该改变选中状态 await radios[1].trigger('click') expect(wrapper.vm.value).toBe('2') // 值改变 }) // 测试自定义类名 test('应用自定义类名', () => { const customClass = 'custom-radio' const wrapper = mount({ components: { WdRadioGroup, WdRadio }, template: ` 选项1 `, data() { return { value: '1' } } }) const radio = wrapper.findComponent(WdRadio) expect(radio.classes()).toContain(customClass) }) })