es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Atascado en la creación de un stub para location.href.

Estoy tratando de simular location.href desde esta referencia: https://medium.com/cypress-io-thailand/understand-stub-spy-apis-that-will-make-your-test-better-than-ever-on-cypress-io-797cb9eb205a y descubrí que las propiedades stub utilizadas ya están en desuso, así que hice una solución alternativa con las nuevas connotaciones:

Después de varias pruebas, me quedé atascado porque parece que el stub no se llama correctamente. Aquí está mi código:

const winSetLocationHrefStub = (url) => {
expect(url).to.eq(‘setLocationHref’);
};

cy.window().then((win) => {
cy.stub(win,’setLocationHref’).callsFake(winSetLocationHrefStub);
});

cy.get(‘.button’).click();

Sé que para simular una propiedad location.href, necesitamos crear una función en el archivo main.js. Aquí está el aspecto del código main.js:

export const setLocationHref = (url) => {
window.location.href = url;
};

const WhatsAppEnquireButton = (props) => {
useEffect(() => {
window.setLocationHref = setLocationHref;
}, []);
const handleOnClick = (e) => {
setLocationHref(formatWhatsAppUrl(foo, bar));
};
};

¿Cómo puedo hacer que simule correctamente el botón que he hecho clic?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Primero, debes asegurarte de que tu archivo main.js esté importado correctamente y que la función setLocationHref esté funcionando correctamente. Puedes probar esto registrando el valor de window.location.href después de hacer clic en el botón.

    Para crear un stub del botón correctamente, puedes probar el siguiente código:

    cy.window().then((win) => {
      cy.stub(win, 'setLocationHref').callsFake((url) => {
        expect(url).to.eq('tu URL esperada');
        win.location.href = url;
      });
    });
    
    cy.get('.button').click();
    

    Este código creará un stub del método setLocationHref en el objeto window y reemplazará su implementación con una función personalizada que verifica el valor de la URL pasada y luego establece window.location.href en ese valor.

    Además, es posible que desees verificar que se haya llamado al stub utilizando cy.wrap para obtener el objeto window y verificar su valor location.href:

    cy.get('.button').click().then(() => {
      cy.window().then((win) => {
        expect(win.location.href).to.eq('tu URL esperada');
      });
    });
    

    Este código esperará a que se complete el evento de clic, luego recuperará el objeto window y verificará que el valor de location.href se haya establecido correctamente.

Comments are closed.