import { mount } from '@vue/test-utils' import { asyncExpect } from '@/tests/utils' import Select from '..' import focusTest from '../../../tests/shared/focusTest' describe('Select', () => { focusTest(Select) it('should have default notFoundContent', async () => { const wrapper = mount(Select, { propsData: { mode: 'multiple', }, sync: false, }) await asyncExpect(() => { wrapper.find('.ant-select').trigger('click') }) const dropdownWrapper = mount({ render () { return wrapper.find({ name: 'Trigger' }).vm.getComponent() }, }, { sync: false }) await asyncExpect(() => { expect(dropdownWrapper.findAll({ name: 'MenuItem' }).length).toBe(1) expect(dropdownWrapper.findAll({ name: 'MenuItem' }).at(0).text()).toBe('Not Found') }) }) it('should support set notFoundContent to null', async () => { const wrapper = mount(Select, { propsData: { mode: 'multiple', notFoundContent: null, }, sync: false, }) await asyncExpect(() => { wrapper.find('.ant-select').trigger('click') }) const dropdownWrapper = mount({ render () { return wrapper.find({ name: 'Trigger' }).vm.getComponent() }, }, { sync: false }) await asyncExpect(() => { expect(dropdownWrapper.findAll({ name: 'MenuItem' }).length).toBe(0) }) }) it('should not have default notFoundContent when mode is combobox', async () => { const wrapper = mount(Select, { propsData: { mode: Select.SECRET_COMBOBOX_MODE_DO_NOT_USE, }, sync: false, }) await asyncExpect(() => { wrapper.find('.ant-select').trigger('click') }) const dropdownWrapper = mount({ render () { return wrapper.find({ name: 'Trigger' }).vm.getComponent() }, }, { sync: false }) await asyncExpect(() => { expect(dropdownWrapper.findAll('MenuItem').length).toBe(0) }) }) it('should not have notFoundContent when mode is combobox and notFoundContent is set', async () => { const wrapper = mount(Select, { propsData: { mode: Select.SECRET_COMBOBOX_MODE_DO_NOT_USE, notFoundContent: 'not at all', }, sync: false, }) await asyncExpect(() => { wrapper.find('.ant-select').trigger('click') }) const dropdownWrapper = mount({ render () { return wrapper.find({ name: 'Trigger' }).vm.getComponent() }, }, { sync: false }) await asyncExpect(() => { expect(dropdownWrapper.findAll({ name: 'MenuItem' }).length).toBe(1) expect(dropdownWrapper.findAll({ name: 'MenuItem' }).at(0).text()).toBe('not at all') }) }) it('should be controlled by open prop', async () => { const onDropdownVisibleChange = jest.fn() const wrapper = mount({ props: { open: { type: Boolean, default: true, }, }, render () { return ( ) }, }, { sync: false }) let triggerComponent = null mount({ render () { triggerComponent = wrapper.find({ name: 'Trigger' }).vm.getComponent() return triggerComponent }, }, { sync: false }) await asyncExpect(() => { // console.log(triggerComponent.componentInstance.visible) expect(triggerComponent.componentInstance.visible).toBe(true) }) await asyncExpect(() => { wrapper.find('.ant-select').trigger('click') expect(onDropdownVisibleChange).toHaveBeenLastCalledWith(false) }) await asyncExpect(() => { expect(triggerComponent.componentInstance.visible).toBe(true) wrapper.setProps({ open: false }) }) await asyncExpect(() => { mount({ render () { triggerComponent = wrapper.find({ name: 'Trigger' }).vm.getComponent() return triggerComponent }, }, { sync: false }) }) await asyncExpect(() => { expect(triggerComponent.componentInstance.visible).toBe(false) wrapper.find('.ant-select').trigger('click') expect(onDropdownVisibleChange).toHaveBeenLastCalledWith(true) expect(triggerComponent.componentInstance.visible).toBe(false) }) }) })