Cypress.minimatch
Cypress automatically includes minimatch
and exposes it as Cypress.minimatch.
Use Cypress.minimatch to test out glob patterns against strings.
Syntax​
Cypress.minimatch(target: string, pattern: string, options?: MinimatchOptions);
Usage​
Correct Usage
Cypress.minimatch('/users/1/comments/2', '/users/*/comments', {
matchBase: true,
})
Incorrect Usage
cy.minimatch() // Errors, cannot be chained off 'cy'
Examples​
By default Cypress uses minimatch to test glob patterns against request URLs.
If you're struggling with writing the correct pattern you can iterate much faster by testing directly in your Developer Tools console.
// test that the glob you're writing matches the request's url
// returns true
Cypress.minimatch('/users/1/comments', '/users/*/comments', {
matchBase: true,
})
// returns false
Cypress.minimatch('/users/1/comments/2', '/users/*/comments', {
matchBase: true,
})
We're adding the { matchBase: true } option because under the hood Cypress
actually uses that option by default.
Now let's test out ** support.
// ** matches against all downstream path segments
// returns true
Cypress.minimatch('/foo/bar/baz/123/quux?a=b&c=2', '/foo/**', {
matchBase: true,
})
// whereas * matches only the next path segment
// returns false
Cypress.minimatch('/foo/bar/baz/123/quux?a=b&c=2', '/foo/*', {
matchBase: false,
})
Notes​
In minimatch glob syntax, ? is a wildcard that matches any single
character — it does not represent a literal ?. If your pattern needs to
match the literal ? that precedes a URL query string, escape it with a
backslash. In a JavaScript string you write \\? so that minimatch receives
the character sequence \?:
// INCORRECT – unescaped ? is a wildcard, not a literal question mark
Cypress.minimatch('/users?_limit=3', '/users?_limit=*', { matchBase: true })
// false — the ? in the pattern matches any single character, not the
// literal ? in the URL
// CORRECT – \\? sends \? to minimatch, which matches a literal ?
Cypress.minimatch('/users?_limit=3', '/users\\?_limit=*', {
matchBase: true,
}) // true