Prueba la posición del evento del ratón con la biblioteca de pruebas de react
Quiero probar una API que utiliza la posición del ratón para hacer algunos cálculos. Estoy usando la biblioteca de pruebas de react y mocha.
Algo como...
const searchClosestPoint(evt) = {
const {clientX, clientY} = evt;
// do some computations
return result;
}
// In my test, assume I have some svg element
const evt = createEvent(someSVGElement, 'mouseoever');
fireEvent(someSVGElement, evt);
expect(searchPoint(evt)).to.equal(expectedResult);
Sin embargo, el cliente X y cliente Y siempre parece ser 0. ¿Alguna pista sobre cómo se puede hacer esto y por qué puede estar sucediendo?
¡Muchas gracias!
Pregunta hecha hace 3 años, 4 meses, 28 días - Por byteninja8245
2 Respuestas:
-
Parece que hay un pequeño error en el código que estás mostrando. Al definir la función
searchClosestPoint(evt)
, parece que está faltando el tipo de evento que se espera recibir como argumento. Además, en el ejemplo del test, estás utilizandocreateEvent
yfireEvent
sin definirlos previamente.Aquí te dejo una posible solución para corregir estos errores y asegurarte de que la posición del ratón se pasa correctamente a la función
searchClosestPoint
:javascript const searchClosestPoint = (evt) => { const {clientX, clientY} = evt; // realizar algunos cálculos return result; } // En mi prueba, asume que tengo algún elemento svg const someSVGElement = document.createElement('svg'); someSVGElement.setAttribute('width', '100'); someSVGElement.setAttribute('height', '100'); const evt = new MouseEvent('mouseover', { clientX: 20, clientY: 30 }); someSVGElement.dispatchEvent(evt); expect(searchClosestPoint(evt)).to.equal(expectedResult);
En este código corregido, definimos la función
searchClosestPoint
correctamente, creamos unMouseEvent
con las coordenadas deseadas y lo despachamos en el elemento svg. Asegúrate de reemplazarexpectedResult
con el valor esperado en tu test.Espero que esta corrección te ayude a resolver el problema que estás experimentando con la posición del ratón en tus pruebas. ¡Déjame saber si tienes alguna otra pregunta!
Respondida el Dec 19, 2020 a las 06:43 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema es que los eventos creados con
createEvent
no tienen propiedadesclientX
yclientY
. Estas propiedades son específicas de los eventos reales del navegador y no se incluyen en los eventos creados mediante programación.Para solucionar este problema, puedes utilizar la propiedad
view
del evento para obtener el documento y la ventana del navegador, y luego utilizar las propiedadespageX
ypageY
del evento para calcular las coordenadasclientX
yclientY
:const evt = createEvent(someSVGElement, 'mouseover'); evt.view = window; evt.pageX = 100; evt.pageY = 200; fireEvent(someSVGElement, evt);
Ahora, el evento tendrá las propiedades
clientX
yclientY
esperadas y podrás probar tu API correctamente.También puedes utilizar una biblioteca como
react-testing-library
que proporciona utilidades para simular eventos del mouse, incluyendo las propiedadesclientX
yclientY
. Por ejemplo:import { fireEvent } from 'react-testing-library'; fireEvent.mouseMove(someSVGElement, { clientX: 100, clientY: 200 });
Respondida el Dec 19, 2020 a las 06:46 - por Gemini
Votos positivos: 0 | Votos negativos: 0