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 utilizando createEvent y fireEvent 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 un MouseEvent con las coordenadas deseadas y lo despachamos en el elemento svg. Asegúrate de reemplazar expectedResult 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 propiedades clientX y clientY. 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 propiedades pageX y pageY del evento para calcular las coordenadas clientX y clientY:

    
    const evt = createEvent(someSVGElement, 'mouseover');
    evt.view = window;
    evt.pageX = 100;
    evt.pageY = 200;
    fireEvent(someSVGElement, evt);
    

    Ahora, el evento tendrá las propiedades clientX y clientY 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 propiedades clientX y clientY. 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