Cypress automatically includes Sinon.JS and exposes it as Cypress.sinon
. Because commands cy.spy
and cy.stub
are already wrapping Sinon methods, the most common use for Cypress.sinon
is to provide flexible matchers when doing assertions.
Syntax
Cypress.sinon.match(value) Cypress.sinon.match.<matcher name>
Usage
Correct Usage
Cypress.sinon.match.string
Incorrect Usage
cy.sinon.match.string // Errors, cannot be chained off 'cy'
Examples
match.string
This example comes from the recipe Root style. Imagine an application code where the method setProperty
is called to change a CSS variable:
document.querySelector('input[type=color]').addEventListener('change', (e) => { document.documentElement.style.setProperty('--background-color', e.target.value) })
We can write a test to confirm that the method setProperty
was called with two strings; we don’t care about value of the first string, but we do want to check if it was indeed a string.
cy.document() .its('documentElement.style') .then((style) => { cy.spy(style, 'setProperty').as('setColor') }) cy.get('input[type=color]') .invoke('val', '#ff0000') .trigger('change') // we don't care about '--background-color' exact // value but know it should be a string cy.get('@setColor') .should('have.been.calledWith', Cypress.sinon.match.string, '#ff0000')
See also
- Spies, stubs & clocks example page
- Sinon matchers documentation page
- Bundled Tools
cy.spy()
cy.stub()
- Stubs, Spies, and Clocks guide