Библиотека тестирования - тест onChange не вызывается - PullRequest
0 голосов
/ 14 июля 2020

Я столкнулся со следующим: мне нужно написать тест, который проверяет, не выполняется ли onChange при нажатии того же значения.

Вот onChange:

const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
if (sameValueClicked) return; 

setValue(event.target.value)
};

И вот тест, который у меня есть до сих пор:

it('Does not call onChange if same value selected', async () => {
  render(
    <ValuePicker
      value={"1st"}
      onChange={jest.fn()}
    />
  );

  fireEvent.click(screen.getByLabelText('Value Picker'));
  await waitFor(() => screen.getByRole('dialog'));

  fireEvent.click(screen.getByLabelText('1st'));
  expect(screen.queryByRole('dialog')).toBeInTheDocument();
});

Прямо сейчас тест проходит, если открывающееся диалоговое окно остается открытым, но это не оптимальное решение.

Есть идеи?

1 Ответ

2 голосов
/ 14 июля 2020

Оберните события кликов в act, а затем проверьте работоспособность.

import { act } from 'react-dom/test-utils';

// ...

it('Does not call onChange if same value selected', async () => {
  const onChange = jest.fn()
  render(
    <ValuePicker
      value={"1st"}
      onChange={onChange}
    />
  );

  act(() => fireEvent.click(screen.getByLabelText('Value Picker')));
  act(() => fireEvent.click(screen.getByLabelText('1st')));
  expect(onChange).not.toHaveBeenCalled();
});
...