@danyvasnafig

Почему не работает тест на ToHaveBeenCalled() jest?

Пытаюсь проверить, вызывается ли обработчик onClickPlay по клику, но в консоли получаю ошибку и

Expected number of calls: >= 1                                                                                                                                                                                               
    Received number of calls:    0

Код теста
test('calls onPlayHandler when the Play button is clicked startgame COMP', () => {
  const onClickPlay = jest.fn();
  render(
    <Provider store={store}>
      <StartGame
        title="Game Name"
        description="Game Description"
        onHowToPlayHandler={() => {}}
        onPlayHandler={onClickPlay}
      />
    </Provider>
  );
  const playButton = screen.getByText('startGame.play'); 
  userEvent.click(playButton);

  expect(onClickPlay).toHaveBeenCalled();
});

Кнопка находится правильно, выводил в консоль, на ней есть обработчик
pendingProps: {
            className: 'start-game__btn',
            onClick: [Function: onClickPlay],
            children: 'startGame.play'
          },
          memoizedProps: {
            className: 'start-game__btn',
            onClick: [Function: onClickPlay],
            children: 'startGame.play'
          },
          updateQueue: null,

В чем может быть дело?
  • Вопрос задан
  • 381 просмотр
Пригласить эксперта
Ответы на вопрос 1
How Jest: toHaveBeenCalled() Work?
События
Expected number of calls: >= 1 Received number of ...

test('calls onPlayHandler when the Play button is clicked startgame COMP', () => {
  const onClickPlay = jest.fn();
  act(() => {
    render(
      <Provider store={store}>
        <StartGame
          title="Game Name"
          description="Game Description"
          onHowToPlayHandler={() => {}}
          onPlayHandler={onClickPlay}
        />
      </Provider>
    )
  });

  const playButton = screen.getByText('startGame.play'); 
  userEvent.click(playButton);

  expect(onClickPlay).toHaveBeenCalled(); // expect(onClickPlay).toBeCalled()
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 18:39
30000 руб./за проект
25 нояб. 2024, в 18:35
30000 руб./за проект
25 нояб. 2024, в 18:33
10000 руб./за проект