Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

fireEvent.select does not wrap its automatic native focus in act

Ouverte Adaptée aux débutants
#1,471 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

@sergioperezcheco y travaille déjà.

Depuis le 7/10/2026.

  • #1472 par @sergioperezcheco — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
88/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
javascript, react
Domaine
testing

Piste de recherche

Commence dans src/fire-event.js à fireEvent.select, où l'appel natif node.focus() se trouve en dehors du eventWrapper configuré utilisé par les dispatches select/keyup environnants. Lis comment eventWrapper est configuré (voir le wrapping act introduit dans #685) et encapsule ce même appel natif de focus, sans synthétiser d'événements de focus ni les réordonner. Le fait d'être terminé signifie que le repro de l'issue passe — les attributs data-focused et data-blurred sont vidés avant le retour de fireEvent.select et il n'y a aucun avertissement de outside-act — avec la suite src/__tests__ existante au vert ; ajoute un test de régression à côté des tests de select.

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

Description

This report was prepared with autonomous AI-agent assistance; it has not received human review.

On current main with React 18.3.1, fireEvent.select focuses an unfocused input or textarea, but React state updates in its onFocus and the previous element's onBlur are not flushed before the call returns. React also reports updates outside act.

import * as React from 'react'
import {render, screen, fireEvent} from '@testing-library/react'

function Example() {
  const [focused, setFocused] = React.useState(false)
  const [blurred, setBlurred] = React.useState(false)
  return <>
    <input aria-label="previous" onBlur={() => setBlurred(true)} />
    <input aria-label="selection" onFocus={() => setFocused(true)}
      data-focused={focused} data-blurred={blurred} />
  </>
}
render(<Example />)
screen.getByRole('textbox', {name: 'previous'}).focus()
const input = screen.getByRole('textbox', {name: 'selection'})
fireEvent.select(input)
expect(document.activeElement).toBe(input) // passes
expect(input.getAttribute('data-focused')).toBe('true') // receives false
expect(input.getAttribute('data-blurred')).toBe('true')

The existing native node.focus() call in src/fire-event.js is outside the configured eventWrapper, unlike the surrounding select and keyup dispatches. Wrapping that same native focus call fixes the focus/blur updates without synthesizing focus events or changing their order.

Verified against rebuilt original and fixed public dist/pure exports on macOS, Node 18.20.8/24.21.0, React 18.3.1 and jsdom 20.0.3. Formal regressions fail twice on original production with two passing controls. The existing worker_threads MessageChannel test shim keeps raw Jest alive after tests in this environment; an evidence-only native Node setImmediate bridge permits natural exit. No forced exit or repository configuration change is part of the fix.

Related: #685 established automatic act wrapping; #1214 proposes a broader asynchronous fireEvent API, and #1429 changes event argument forwarding. Neither wraps select's native focus call.

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.