En Cypress tengo un montón de artículos y me gustaría probar que todos tienen al menos X caracteres o Y palabras dentro de .content
-div.
La estructura de .content
-div se ve así:
<div class="content"> <p> Lorem ipsum dolor sit amet. </p> <p> Adipiscing elit suspendisse eu nibh. </p> </div>
Si actualmente hago esto:
cy.get( '.content' ).its( 'length' ).should( 'be.gte', 5 );
Pero esto produce el error:
esperaba que 2 fuera al menos 5
Dado que cuenta las etiquetas dentro del div, las dos etiquetas <p>
. En lugar de contar las palabras dentro de estas etiquetas <p>
.
¿Cómo cuento todas las palabras/caracteres (cualquiera de los dos está bien), en todos los niños (e idealmente también los niños de los niños recursivamente)?
... Entonces, una función que devolvió 10
para el ejemplo anterior.
Podría ser genial tener un comando con él.
Usaría una palabra regex y verificaría la longitud de la coincidencia.
cy.get('.content') .invoke('text') // include children .match(/[\w-]+/g) // match words .its('length) .should('be.gt', 5) .and('eq', 10)
Puede iterar directamente sobre las etiquetas p
usando each
y luego invocar texto y luego afirmar su longitud.
cy.get('.content > p').each(($ele) => { cy.wrap($ele).invoke('text').its('length').should('be.gte', 5) })
Puedes contar los espacios,
cy.get('.content') .find('p') // children + children's children (any <p> under .content) .each($p => { const words = $p.text().split(' ').length +1 expect(words.length).to.be.gte(5) })