import { config, DOMWrapper, mount } from '@vue/test-utils'; import Form from '../index.vue'; import NutCellGroup from '../../cellgroup/index.vue'; import FormItem from '../../formitem/index.vue'; import NutCell from '../../cell/index.vue'; import NutIcon from '../../icon/index.vue'; import NutButton from '../../button/index.vue'; import NutTextarea from '../../textarea/index.vue'; import NutSwitch from '../../switch/index.vue'; import NutCheckbox from '../../checkbox/index.vue'; // import NutRadio from '../../radio/index.vue'; // import NutRadioGroup from '../../radiogroup/index.vue'; import NutRate from '../../rate/index.vue'; import NutInputnumber from '../../inputnumber/index.vue'; import NutRange from '../../range/index.vue'; import NutUploader from '../../uploader/index.vue'; import NutAddress from '../../address/index.vue'; import NutElevator from '../../elevator/index.vue'; import NutProgress from '../../progress/index.vue'; import NutPopup from '../../popup/index.vue'; import { nextTick, toRefs, ref, reactive } from 'vue'; beforeAll(() => { config.global.components = { NutCellGroup, FormItem, NutCell, NutIcon, NutButton, NutTextarea, NutSwitch, NutCheckbox, // NutRadio, // NutRadioGroup, NutRate, NutInputnumber, NutRange, NutUploader, NutAddress, NutElevator, NutProgress, NutPopup }; }); afterAll(() => { config.global.components = {}; }); describe('Form', () => { test('base Form', () => { const wrapper = mount(Form); const rate = wrapper.find('.nut-form'); expect(rate.exists()).toBe(true); }); test('base Form usage', async () => { const wrapper = mount({ components: { 'nut-form': Form, 'nut-form-item': FormItem }, template: ` ` }); await nextTick(); const form = wrapper.find('.nut-cell-group__warp'); expect(form.exists()).toBe(true); const formitem = wrapper.findAll('.nut-form-item'); expect(formitem.length).toBe(5); }); test('base Dynamic Form', async () => { const wrapper = mount({ components: { 'nut-form': Form, 'nut-form-item': FormItem }, template: ` 添加 删除 提交 重置提示状态 `, setup() { const dynamicRefForm = ref(null); const dynamicForm = { state: reactive({ name: '', tels: new Array({ key: 1, value: '' }) }), methods: { submit() { dynamicRefForm.value.validate().then(({ valid, errors }: any) => { if (valid) { // console.log('success', dynamicForm); } else { // console.log('error submit!!', errors); } }); }, reset() { dynamicRefForm.value.reset(); }, remove() { dynamicForm.state.tels.splice(dynamicForm.state.tels.length - 1, 1); }, add() { let newIndex = dynamicForm.state.tels.length; dynamicForm.state.tels.push({ key: Date.now(), value: '' }); } } }; return { dynamicForm, dynamicRefForm }; } }); await nextTick(); const formitem = wrapper.findAll('.nut-form-item'); expect(formitem.length).toBe(2); const form1 = wrapper.find('.nut-cell__title'); expect(form1.classes()).toContain('required'); expect((form1.element as HTMLElement).style.textAlign).toEqual(''); expect((form1.element as HTMLElement).style.width).toEqual('90px'); const form2 = wrapper.find('.nut-form-item__body__slots'); expect((form2.element as HTMLElement).style.textAlign).toEqual('center'); const form4 = wrapper.find('.submit'); form4.trigger('click'); await nextTick(); const form3 = wrapper.find('.nut-form-item__body__tips'); expect(form3.exists()).toBe(true); const form5 = wrapper.find('.nut-form-item.error.line::before'); expect(form5.exists()).toBe(false); await nextTick(); const form6 = wrapper.find('.add'); form6.trigger('click'); setTimeout(() => { expect(formitem.length).toBe(3); }, 0); const form7 = wrapper.find('.remove'); form7.trigger('click'); setTimeout(() => { expect(formitem.length).toBe(1); }, 0); const form8 = wrapper.find('.reset'); form8.trigger('click'); setTimeout(() => { expect(form3.exists()).toBe(false); }, 0); }); test('base Form verification', async () => { const wrapper = mount({ components: { 'nut-form': Form, 'nut-form-item': FormItem }, template: ` 提交 重置提示状态 `, setup() { const formData = reactive({ name: '' }); const ruleForm = ref(null); const submit = () => { ruleForm.value.validate().then(({ valid, errors }: any) => { if (valid) { // console.log('success', formData); } else { // console.log('error submit!!!', errors); } }); }; const reset = () => { ruleForm.value.reset(); }; return { ruleForm, formData, submit, reset }; } }); // .nut-input-text const formitem: DOMWrapper = wrapper.find('.nut-input-text'); expect(formitem.exists()).toBe(true); expect(formitem.attributes().type).toBe('text'); const formitem2: DOMWrapper = wrapper.find('.nut-form-item__body__tips'); const formitem3: DOMWrapper = wrapper.find('.submit'); formitem3.trigger('click'); await nextTick(); expect(formitem3.exists()).toBe(true); const formitem1: DOMWrapper = wrapper.find('.resets'); formitem1.trigger('click'); expect(formitem2.exists()).toBe(false); }); test('base Form Type', async () => { const wrapper = mount({ components: { 'nut-form': Form, 'nut-form-item': FormItem }, template: ` 复选框 `, setup() { const formData2 = reactive({ switch: false, checkbox: false, radio: 0, number: 0, rate: 3, range: 30, address: '', defaultFileList: [ { name: '文件1.png', url: 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif', status: 'success', message: '上传成功', type: 'image' }, { name: '文件2.png', url: 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif', status: 'uploading', message: '上传中...', type: 'image' } ] }); const addressModule = reactive({ state: { show: false, province: [ { id: 1, name: '北京' }, { id: 2, name: '广西' }, { id: 3, name: '江西' }, { id: 4, name: '四川' } ], city: [ { id: 7, name: '朝阳区' }, { id: 8, name: '崇文区' }, { id: 9, name: '昌平区' }, { id: 6, name: '石景山区' } ], country: [ { id: 3, name: '八里庄街道' }, { id: 9, name: '北苑' }, { id: 4, name: '常营乡' } ], town: [] } }); return { formData2, addressModule }; } }); await nextTick(); const formitem = wrapper.findAll('.nut-form-item'); expect(formitem.length).toBe(7); const formitem1 = wrapper.find('.nut-switch'); expect(formitem1.exists()).toBe(true); const formitem2 = wrapper.find('.nut-checkbox'); expect(formitem2.exists()).toBe(true); const formitem3 = wrapper.find('.nut-rate'); expect(formitem3.exists()).toBe(true); const formitem4 = wrapper.find('.nut-inputnumber'); expect(formitem4.exists()).toBe(true); const formitem5 = wrapper.find('.nut-range'); expect(formitem5.exists()).toBe(true); const formitem6 = wrapper.find('.nut-uploader'); expect(formitem6.exists()).toBe(true); }); });