Я столкнулся с аналогичной проблемой с компонентом, который подписан на Keyboard
события
const MyComponent = () => {
useEffect(() => {
const listener = Keyboard.addListener('keyboardDidHide', () => {})
return () => {
listener.remove()
}
})
return <View>...</View>
}
Я смог проверить Keyboard.addListener
с помощью следующего теста, а также проверить, что listener.remove
вызывается для компонентаразмонтировать
import renderer from 'react-test-renderer'
const mockListener = {
remove: jest.fn(),
}
const originalAddListener = Keyboard.addListener
const mockAddListener = jest.fn().mockReturnValue(mockListener)
describe('<MyComponent />', () => {
beforeAll(() => {
Keyboard.addListener = mockAddListener
})
beforeEach(() => {
mockAddListener.mockClear()
mockListener.remove.mockClear()
})
afterAll(() => {
Keyboard.addListener = originalAddListener
})
it('should subscribe to KeyboardDidClose event', () => {
render(<MyComponent />)
expect(Keyboard.addListener).toHaveBeenCalled()
})
it('should call listener.remove on unmount', () => {
const component = render(
< MyComponent />,
)
component.unmount()
expect(mockListener.remove).toHaveBeenCalled()
})
})