`fireEvent.mouseEnter` does not forward `relatedTarget` (relatedTarget is the window instead)
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 55/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Estagnada
- Stack de tecnologia
- javascript, react
- Domínio
- frontend, testing-qa
Direção de pesquisa
Reproduza o problema usando TestMouseEnter.test.tsx e compare-o com TestMouseOver.test.tsx; em seguida, rastreie o ponto de entrada fireEvent.mouseEnter. Considera-se concluído quando o relatedTarget especificado chega ao handler onMouseEnter e um teste de regressão passa sem quebrar o comportamento de mouseOver.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Versions
@testing-library/reactversion:16.3.0- Testing Framework and version:
[email protected] - DOM Environment:
[email protected]
Relevant code or config:
Test component using onMouseEnter:
// TestMouseEnter.tsx
import { type MouseEvent } from 'react';
export function Test() {
const handleMouseEnter = (e: MouseEvent) => {
console.log('mouseEnter', e.relatedTarget);
};
return (
<>
<div onMouseEnter={handleMouseEnter}>
Hello
</div>
</>
);
}
Unit test for dummy component using onMouseEnter:
// TestMouseEnter.test.tsx
import { describe, expect, it, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/react';
import { Test } from './test';
describe('Test', () => {
it('handles mouse enter event', () => {
const consoleSpy = vi.spyOn(console, 'log');
render(<Test />);
const element = screen.getByText('Hello');
const mockRelatedTarget = document.createElement('div');
fireEvent.mouseEnter(element, {
relatedTarget: mockRelatedTarget,
});
expect(consoleSpy).not.toHaveBeenCalledWith('mouseEnter', window);
// FAILS: Compared values have no visual difference
expect(consoleSpy).toHaveBeenCalledWith('mouseEnter', mockRelatedTarget);
// FAILS: 1st log call: ["mouseEnter", [Object]]
});
});
The same dummy component but this time using onMouseOver:
// TestMouseOver.tsx
import { type MouseEvent } from 'react';
export function Test() {
const handleMouseOver = (e: MouseEvent) => {
console.log('mouseOver', e.relatedTarget);
};
return (
<>
<div onMouseOver={handleMouseOver}>
Hello
</div>
</>
);
}
Unit test for dummy component using onMouseOver:
// TestMouseOver.test.tsx
import { describe, expect, it, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/react';
import { Test } from './test';
describe('Test', () => {
it('handles mouse over event', () => {
const consoleSpy = vi.spyOn(console, 'log');
render(<Test />);
const element = screen.getByText('Hello');
const mockRelatedTarget = document.createElement('div');
fireEvent.mouseOver(element, {
relatedTarget: mockRelatedTarget,
});
expect(consoleSpy).not.toHaveBeenCalledWith('mouseOver', window);
// OK
expect(consoleSpy).toHaveBeenCalledWith('mouseOver', mockRelatedTarget);
// OK
});
});
What you did:
I am using fireEvent.mouseEnter and want to specify a specific element as relatedTarget.
What happened:
In the event handler, e.relatedTarget is a reference to window instead of the specified element.
mouseOver does not have this issue.
Problem description:
It should be possible to specify the relatedTarget for mouseEnter events as the same works for mouseOver events.
StackBlitz Link
https://stackblitz.com/edit/rtl-template-mqbjsare?file=src%2Fcomponents%2FTestMouseEnter.test.tsx
- Linguagem predominante
- JavaScript
- Estrelas
- 19.7k
- Forks
- 1.2k
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de testing-library/react-testing-library
-
fireEvent.select does not wrap its automatic native focus in actTalvez já em andamento @sergioperezcheco assumiu há 2 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
-
bug: calling configure() without reactStrictMode resets it to undefined, silently disabling strict modeTalvez livre de novo @suhailopensource assumiu há 72 dias e não há nenhum pull request aberto. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 35/100
testing-library/react-testing-library#1466 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 30/100
testing-library/react-testing-library#1459 · 2 comentários ·
-
perf: optimize container lookup with early exitTalvez livre de novo @Ch-Abhinav-Chowdary assumiu há 298 dias e não há nenhum pull request aberto. Aberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 35/100
testing-library/react-testing-library#1430 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 42/100
testing-library/react-testing-library#1421 · 1 comentário ·
Todas as issues de testing-library/react-testing-library
Issues semelhantes
-
[BUG] Multi-day events show "Ended" while still in progressTalvez já em andamento @tarunagnihotri534 assumiu hoje. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
data-umbrella/du-event-board#231 · 2 comentários ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
NaturalIntelligence/fast-xml-parser#888 · 1 comentário ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 80/100
USACE/chart-docs#766 ·
-
bug callouts regression revealjs
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
quarto-dev/quarto-cli#15014 ·
Mantenedores costumam responder em até 1 dia