import { act, fireEvent, render } from '@testing-library/react'; import React from 'react'; import { Identify, Props } from './identify'; describe(Identify.name, () => { const props: Props = { connecting: false, onIdentify: jest.fn(), }; it('should render an input', () => { expect.assertions(1); const { getByDisplayValue } = render(); expect(getByDisplayValue('')).toBeInTheDocument(); }); it('should render a connect button', () => { expect.assertions(1); const { getByText } = render(); expect(getByText('Connect')).toBeInTheDocument(); }); describe('when pressing the connect button', () => { it('should call the onIdentify prop', () => { expect.assertions(2); const { getByDisplayValue, getByText } = render(); const input = getByDisplayValue(''); const button = getByText('Connect'); act(() => { fireEvent.change(input, { target: { value: 'my-computer' } }); }); act(() => { fireEvent.click(button); }); expect(props.onIdentify).toHaveBeenCalledTimes(1); expect(props.onIdentify).toHaveBeenCalledWith('my-computer'); }); }); describe('when connecting', () => { const propsConnecting: Props = { ...props, connecting: true }; it('should not render the connect button', () => { expect.assertions(1); const { queryByText } = render(); expect(queryByText('Connect')).not.toBeInTheDocument(); }); }); });