Test based on `findByText` assertion fails after 551ms, despite default timeout being 1000ms

Ouverte
#1,414 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
À clarifier
Activité
À l'abandon
Stack technique
javascript, react, typescript
Domaine
testing-qa

Piste de recherche

Commencez par l’assertion screen.findByText fournie et par les versions indiquées de @testing-library/react 16.3.0, Vitest 3.2.4 et jsdom 26.1.0. Cherchez à déterminer, en vous appuyant sur la documentation findBy liée et sur l’issue précédente comme contexte, si l’échec atteint le délai d’expiration documenté de 1000ms ou si Vitest signale la durée de manière inexacte. Le travail est terminé lorsque la source de l’échec précoce intermittent est identifiée ou qu’il est documenté qu’il est externe.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

  • @testing-library/react version: 16.3.0
  • Testing Framework and version: Vitest 3.2.4
  • DOM Environment: jsdom 26.1.0
Relevant code or config:
expect(
  await screen.findByText(
    "text which is supposed to be found after loading state is passed",
  ),
).toBeInTheDocument();
What you did:

Ran a test which failed on this assertion. Only sometimes. Typically in CI (Github Actions).

What happened:

× path/to/my.test.tsx > x > shows expected content 551ms
→ expect(element).toBeInTheDocument()
element could not be found in the document
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯
FAIL path/to/my.test.tsx > x > shows expected content
Error: expect(element).toBeInTheDocument()
element could not be found in the document

Reproduction:

Does not reproduce easily. Is flaky. Trying to understand if there is some misunderstanding in how things are supposed to work.

Problem description:

When running a test based on findBy, we sometimes find them to be flaky. It is sometimes resolved by using waitForElementToBeRemoved on the previous state, but that just adds another possible race condition, and also tends to be flaky.

I expect the test to run for at least 1000ms (as per findBy logic documented here), but sometimes find that the test fails much sooner (after 551 ms in the example above).

Suggested solution:

I'm trying to deduce a cause here for further investigation.

  • Is findBy resolving sooner than expected? If yes, it seems like a problem internal to the library, possibly https://github.com/testing-library/react-testing-library/issues/865?
  • Is the (vitest) reported time unreliable, and we may have hit the 1000ms timeout despite 551ms being reported? If so, maybe extending the default timeout could be beneficial, even though hundreds of similar tests tend to pass every time, so it seems odd.

Overall, this seems like a strange problem, and I'm not expecting a straight-forward fix, but would like you to know about it, and would be grateful for any pointers on how to analyze further.

Langage dominant
JavaScript
Étoiles
19.7k
Forks
1.2k
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de testing-library/react-testing-library

Toutes les issues de testing-library/react-testing-library

Issues similaires

Plus d'issues JavaScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.