import React from 'react' import { act } from 'react-dom/test-utils' import { mount, ReactWrapper } from 'enzyme' import { KEYS } from '../keycodes' import { FOCUS_VISIBLE_CSS_CLASS, FocusVisibleProvider } from './index' import { useFocusVisible } from './useFocusVisible' let wrapper: ReactWrapper const ButtonComponent = () => { const { focusVisible, onFocus, onBlur } = useFocusVisible() return ( ) } describe('useFocusVisible', () => { beforeEach(() => { wrapper = mount( , ) }) it('Should have `focusVisible` truthy value only when focused + keyboard nav used', () => { expect(wrapper.find('button').prop('className')).toEqual(null) act(() => { document.body.dispatchEvent(new KeyboardEvent('keydown', { key: KEYS.TAB })) }) wrapper.update() expect(wrapper.find('button').prop('className')).toEqual(null) wrapper.find('button').simulate('focus') expect(wrapper.find('button').prop('className')).toEqual(FOCUS_VISIBLE_CSS_CLASS) }) it('Should have `focusVisible` falsy value when use not whitelisted key', () => { wrapper.find('button').simulate('focus') act(() => { document.body.dispatchEvent(new KeyboardEvent('keydown', { key: 'Alt' })) }) wrapper.update() expect(wrapper.find('button').prop('className')).toEqual(null) }) })