Mi prueba da como resultado agregar una fila a la tabla. En afterEach, quería agregar un método para eliminar la fila más nueva después de ejecutar la prueba, así que escribí este fragmento de código:
deleteTheNewestRequest() { cy.get('table#return-request-list').find('tr').eq(1).then( firstRow => { cy.wrap(firstRow).find('td').eq(0).invoke('text').as('rowId') cy.wrap(firstRow).find('a[title="Delete"]').click() cy.get('button.btn-delete-return-request').click() cy.wrap(firstRow).find('td').first().should('not.have.text', this.rowId) }) }Con 'entonces' estoy guardando un elemento de tabla para usarlo más tarde para encontrar y operar en los elementos dentro de él. Primero quería guardar el valor de la fila más nueva en la tabla que se agregó después de que la prueba se ejecutó correctamente, luego eliminar y, como último paso, asegurarme de que la fila con la ID que se eliminó realmente haya desaparecido de la tabla. El problema es que las afirmaciones del corredor de pruebas de Cypress lo marcan en verde porque ve que el valor de no es igual a 'indefinido' y no, digamos 3794.
Esto parece el culpable cy.get('table#return-request-list').find('tr').eq(1) . Obtiene la fila que desea eliminar, la elimina y luego envuelve el elemento de la fila de eliminación aunque no exista. Por lo tanto, devolverá undefined . En su lugar, debe obtener todas las filas inicialmente.
function deleteTheNewestRequest(){ // get all rows in table cy.get('table#return-request-list').find('tr').then( rows => { // get last row and store rowId cy.wrap(rows).last().find('td').first().invoke('text').as('deletedRowId') cy.wrap(rows).last().find('a[title="Delete"]').click() cy.get('button.btn-delete-return-request').click() // check new last row does not have same rowId cy.wrap(rows).last().find('td').first().should('not.have.text', this.rowId) }) }Dividir los pasos podría funcionar mejor.
deleteTheNewestRequest() { cy.get('table#return-request-list') .find('tr').eq(1) .as('firstRow') // save row ref for delete .find('td').eq(0) .invoke('text').as('rowId') // save rowId text for check cy.get('@firstRow').find('a[title="Delete"]').click() cy.get('button.btn-delete-return-request').click() cy.get('@rowId').then(rowId => { cy.contains('tr', rowId).should('not.exist') // "standard" non-existence check }) }Prueba de referencia si el elemento no existe
Verificaría si .find('tr').eq(1) es la primera fila, ¿quizás debería ser .find('tr').eq(0) ?
Cuando elimina la fila, se elimina del DOM, pero la prueba todavía tiene un puntero hacia ella (la variable firstRow), lo que impide que el recolector de elementos no utilizados la elimine de la memoria.
Por lo tanto cy.wrap(firstRow) todavía apunta a la fila completa y aún tiene el mismo ID de fila.
Desea probar lo que ve el usuario, que firstRow ya no está en el DOM.
//cy.wrap(firstRow).find('td').first().should('not.have.text', this.rowId) // not this cy.wrap(firstRow).should(firstRow => { expect(Cypress.dom.isAttached(firstRow)).to.eq(false) })O pruebe que ninguna fila en el DOM tiene el ID de fila
cy.get('@rowId').then(rowId => { cy.contains('tr', rowId).should('not.exist') })