Estoy tratando de usar Cypress (que contiene mocha , además estoy usando mocha-chai ) para verificar una serie de palabras que NO están incluidas en una frase. Esto se debe a que, por ejemplo, tengo tres <div> y quiero comprobar
Para hacer eso, estoy usando .contain y .not.contain pero desafortunadamente encuentran algunas subcadenas:
si tengo
// div1 <div> ... The perfect professionist for you </div> // div2 <div> ... Good professionists are ready here </div>hago
expect(div1).to.contain('professionist') // true expext(div1).to.not.contain('professionists') // trueesto esta bien, pero
expect(div2).to.contain('professionists') // true expect(div2).to.not.contain('professionist') // false!fallará.
¿Hay alguna manera de usar cypress, mocha o algo similar para verificar la palabra completa pero no la subcadena?
Puedes usar una expresión regular para hacer eso. Para la afirmación, debe usar match() .
var regexValue = "(?<!\S)word(?!\S)" var actualRegexValue = new RegExp(regexValue.replace("word", "professionist")) cy.get('div2').invoke('text').then((text) => { expect(text).to.match(actualRegexValue) }) Su expresión regular /(?<!\S)professionist(?!\S)/ solo buscará la cadena professionist en la oración y nada más, ni siquiera professionists .
Más general es el límite de palabra regex
cy.get('div').eq(1).invoke('text') .then(div2Text => expect(div2Text).to.not.match(/\bprofessionist\b/)) // passes o pasar la palabra a la expresión regular (la nota requiere \\b para una traducción adecuada)
const word = 'professionist' const regex = new RegExp(`\\b${word}\\b`) cy.get('div').eq(1).invoke('text') .then(div2Text => expect(div2Text).to.not.match(regex)) // passes cy.get('div').eq(1).invoke('text') .should('not.match', regex) // passes /// <reference types="cypress" /> before(() => {}) beforeEach(() => { cy.viewport(2048, 1080) }) describe('Test', () => { it('simple test', () => { let div = document.createElement('div') let content = document.createTextNode('Good professionists are ready here') div.appendChild(content) try { let word = 'professionist' let regex = new RegExp(`\\b${word}\\b`) expect(div.innerText).not.to.match(regex) // passes word = 'professionists' regex = new RegExp(`\\b${word}\\b`) expect(div.innerText).to.match(regex) // passes } catch (error) { Cypress.log(error) } }) })