import { mount } from '@vue/test-utils'; import { sleep } from '../utils'; export default function focusTest(Component) { describe('focus and blur', () => { let container; beforeEach(() => { container = document.createElement('div'); document.body.appendChild(container); }); afterEach(() => { document.body.removeChild(container); }); it('focus() and onFocus', async () => { const handleFocus = jest.fn(); const wrapper = mount( { render() { return ; }, }, { attachTo: container, sync: false }, ); await sleep(); wrapper.vm.$refs.component.focus(); await sleep(); expect(handleFocus).toBeCalled(); }); it('blur() and onBlur', async () => { const handleBlur = jest.fn(); const handleFocus = jest.fn(); const wrapper = mount( { render() { return ; }, }, { attachTo: container, sync: false }, ); wrapper.vm.$refs.component.focus(); wrapper.vm.$refs.component.blur(); await sleep(3000); expect(handleBlur).toBeCalled(); }); it('autofocus', async () => { const handleFocus = jest.fn(); const wrapper = mount( { render() { return ; }, }, { attachTo: container, sync: false }, ); await sleep(); const focusEle = wrapper.findAll('[autofocus]'); if (focusEle.length) { focusEle[0].trigger('focus'); } expect(handleFocus).toBeCalled(); }); }); }