cypressglobminimatch

Minimatch pattern for two paths where one is prefix of the other


I am writing an integration test with cypress and having trouble with minimatch pattern.

I have two endpoints that I need to stub. /users/1 and /users/1/profile.

The way I am trying to mock these two endpoints with cy.intercept() is the following. For the first url, /users/1, I tried cy.intercept('GET', '/users/1', {}).

For the secton url , /users/1/profile, I tried cy.intercept('GET', '/users/1/profile', {}).

The problem is that the first pattern intercepts twice.

Can I get some help on this?? Thanks.


Solution

  • I, too, fell into this problem when first using cy.intercept. The solution is to pass in a RouteMatcher object to the method. In particular, you'll want to use the last method signature from the image below:

    usage

    In the RouteMatcher object, you can specify a path property. Here's the description of the path property:

    path property

    In essence, using the path property of the RouteMatcher object does an exact match against the given string, whereas the url parameter in the 1st and 2nd method signatures does a substring match against the given string.

    So what you'll want is:

    cy.intercept(
        {method: 'GET', path: '/users/1'},
        {body: {}}
    )
    
    cy.intercept(
        {method: 'GET', path: '/users/1/profile'},
        {body: {}}
    )
    

    In my opinion, this slight change from Cypress between the cy.route and cy.intercept methods was weird and a bit unexpected on the first run-through.