import { mount } from '@vue/test-utils'; import { asyncExpect } from '../utils'; export default function focusTest(Component) { describe('focus and blur', () => { beforeAll(() => { jest.useFakeTimers(); }); afterAll(() => { jest.useRealTimers(); }); it('focus() and onFocus', async () => { const handleFocus = jest.fn(); const wrapper = mount( { render() { return ; }, }, { attachTo: 'body', sync: false }, ); wrapper.vm.$refs.component.focus(); jest.runAllTimers(); expect(handleFocus).toBeCalled(); }); it('blur() and onBlur', async () => { const handleBlur = jest.fn(); const wrapper = mount( { render() { return ; }, }, { attachTo: 'body', sync: false }, ); wrapper.vm.$refs.component.focus(); wrapper.vm.$refs.component.blur(); jest.runAllTimers(); await asyncExpect(() => { expect(handleBlur).toBeCalled(); }); }); it('autofocus', done => { jest.useRealTimers(); const handleFocus = jest.fn(); mount( { render() { return ; }, }, { attachTo: 'body', sync: false }, ); setTimeout(() => { expect(handleFocus).toBeCalled(); done(); }, 1000); }); }); }