How to use Chai-jQuery's expect().to.match() assertion in Cypress? The BDD assertion with the same name gets used instead

Viewed 227

I want to use the Chai-jQuery .match assertion:

// from Cypress docs: 
// match(selector)  
expect($emptyEl).to.match(':empty')

But the problem is, that a BDD Assertion with the same name exists:

// from Cypress docs: 
// match(RegExp)
expect('testing').to.match(/^test/)

I want to use the first one, but I can't figure out how - each time the BDD assertion gets used instead and throws an error. For example:

expect(cy.get('div')).to.match('#someId')

match requires its argument be a RegExp. You passed: #someId

I tried passing many different things into the expect() call in hopes of triggering a different overload, but I always get this error.

So what do I need to do to use the Chai-jQuery .match aseertion?

1 Answers

I think Cypress choses the .match() version from the type passed to the expect() part.

With this fragment

<div id="someId">some text</div>

this will pass

cy.get('div').then($el => {

  expect($el).to.match('#someId')  // $el is type object, 
                                   // so match will be from chai-jQuery

  expect($el.text()).to.match(/some text/)  // $el.text() is type string, 
                                            // so match will be from chai
})

// Same applies with .should() wrapper

cy.get('div').should('match', '#someId')

cy.get('div').invoke('text').should('match', /some text/)

Related