Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Calling render on a component that throws, results in 4 renders

Aberta
#1,291 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
25/100
Tipo de issue
Bug
Clareza
Precisa de esclarecimento
Status de atividade
Estagnada
Stack de tecnologia
javascript, react, typescript
Domínio
frontend, testing

Direção de pesquisa

Comece com a reprodução vinculada em error-component.spec.tsx e error-component.tsx e, em seguida, execute o teste com as versões informadas do React, Jest e @testing-library/react. Rastreie o caminho de renderização para determinar por que o componente que lança o erro é invocado repetidamente; o problema estará resolvido quando a contagem de renderizações observada for explicada e o comportamento esperado for estabelecido com uma cobertura de testes adequada.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

  • @testing-library/react version: 14.2.2
  • Testing Framework and version: jest 29.4.1
  • DOM Environment: jest-environment-jsdom 29.4.1
  • node: 20.11.1
  • react: 18.2.0
Relevant code or config:

https://github.com/R-J-dev/example-error-render-issue/blob/main/src/test-error/error-component.tsx

error-component.tsx (just as an example, I know the return is unreachable):

export const ErrorComponent = () => {
  // This logs four times, but it should log only once?
  console.log('test error in component');
  // When debugging this during a test, the debugger wil stop here five times. But we expect that it stops only once?
  throw new Error('test error in component');
  return <p>This is an error test component, which will throw an error</p>;
};

error-component.spec.tsx:

import { render } from '@testing-library/react';
import { ErrorComponent } from './error-component';

it('should throw', () => {
  expect(() => render(<ErrorComponent />)).toThrow('test error in component');
});
What you did:

I was trying to test if a specific error was thrown in a component and used the render function from @testing-library/react.

What happened:

When debugging the component that is called in the render function, I found out that it seems to load 4/5 times.
Without throwing an error in the component that is being rendered, the component only loads once.
When calling the component that throws an error without the render function, the component only loads once.

Reproduction:

Reproduction repo can be found here: https://github.com/R-J-dev/example-error-render-issue/tree/main
It's a new setup created with: npx create-nx-workspace@latest (https://nx.dev/getting-started/intro)

The test: https://github.com/R-J-dev/example-error-render-issue/blob/main/src/test-error/error-component.spec.tsx
The component: https://github.com/R-J-dev/example-error-render-issue/blob/main/src/test-error/error-component.tsx

Problem description:

Not sure if this is normal behavior, but for me it's unexpected behavior and couldn't find why this is happening.

Also:

  • Probably not good for test performance
  • Mocking things once isn't possible, when testing if an error has thrown
Suggested solution:

It looks like that the problem is in the render function from @testing-library/react, but besides from that I have no clue yet.

Linguagem predominante
JavaScript
Estrelas
19.7k
Forks
1.2k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de testing-library/react-testing-library

Todas as issues de testing-library/react-testing-library

Issues semelhantes

Mais issues de JavaScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.