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.

¿Cómo repetir una prueba en Cypress varias veces?

Tengo la siguiente sección de código en una de mis pruebas de Cypress:

cy.window()
  .its('store')
  .invoke('getState')
  .then((state) => {
    expect(state.app.gameStarted).to.equal(true)
    expect(state.app.noteButtonValues).to.have.lengthOf(4);
    expect(state.app.noteButtonValues).to.include(state.app.correctAnswer)
    cy.get("button").contains(state.app.correctAnswer).click()

    cy.window()
    .its('store')
    .invoke('getState')
    .then((state) => {  
        expect(state.app.correctAnswered).to.equal(1)
        expect(state.app.totalAnswered).to.equal(1)
    })   
  })
})

Estoy probando que cuando un usuario hace clic en un botón, el estado de Redux también se actualiza. Ahora supongamos que quiero repetir esta sección unas 100 veces. ¿Cómo sería eso posible?

No funciona envolverlo en un bucle for así:

for (let i = 0; i < 100; i = i++) {
    cy.window()
    .its("store")
    .invoke("getState")
    .then((state) => {
        expect(state.app.gameStarted).to.equal(true);
        expect(state.app.noteButtonValues).to.have.lengthOf(4);
        expect(state.app.noteButtonValues).to.include(state.app.correctAnswer);
        cy.get("button").contains(state.app.correctAnswer).click();

        cy.window()
        .its("store")
        .invoke("getState")
        .then((state) => {
            expect(state.app.correctAnswered).to.equal(1);
            expect(state.app.totalAnswered).to.equal(1);
        });
    });
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para repetir esta sección durante 100 clics, podemos usar el comando cy.wrap() de Cypress para crear un arreglo de 100 elementos y luego encadenar el comando each() para iterar sobre cada elemento y ejecutar el código de prueba en él, de esta manera:

    cy.wrap(new Array(100)).each(() => {
      cy.window()
        .its('store')
        .invoke('getState')
        .then((state) => {
          expect(state.app.gameStarted).to.equal(true)
          expect(state.app.noteButtonValues).to.have.lengthOf(4)
          expect(state.app.noteButtonValues).to.include(state.app.correctAnswer)
          cy.get('button').contains(state.app.correctAnswer).click()
    
          cy.window()
            .its('store')
            .invoke('getState')
            .then((state) => {
              expect(state.app.correctAnswered).to.equal(1)
              expect(state.app.totalAnswered).to.equal(1)
            })
        })
    })
    

    Esto ejecutará el código de prueba en el comando each() 100 veces, y Cypress esperará automáticamente a que cada iteración se complete antes de comenzar la siguiente.

Comments are closed.