Bird
Raised Fist0
Cypresstesting~5 mins

Stubbing responses in Cypress

Choose your learning style10 modes available
Introduction

Stubbing responses lets you fake server answers during tests. This helps you test your app without needing a real server.

When the real server is slow or unavailable.
To test how your app handles specific server responses like errors.
To speed up tests by avoiding real network calls.
When you want to test edge cases that are hard to get from the real server.
Syntax
Cypress
cy.intercept(method, url, response).as(alias)

method is the HTTP method like GET or POST.

url is the endpoint you want to stub.

Examples
This stubs a GET request to '/api/users' and returns data from a fixture file named 'users.json'.
Cypress
cy.intercept('GET', '/api/users', { fixture: 'users.json' }).as('getUsers')
This stubs a POST request to '/api/login' and returns a success message with status 200.
Cypress
cy.intercept('POST', '/api/login', { statusCode: 200, body: { success: true } }).as('postLogin')
Sample Program

This test stubs the GET /api/users call to return two users. Then it visits the users page and checks that two user names appear, with the first being 'Alice'.

Cypress
describe('User list test with stub', () => {
  it('shows users from stubbed response', () => {
    cy.intercept('GET', '/api/users', {
      statusCode: 200,
      body: [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }]
    }).as('getUsers')

    cy.visit('/users')

    cy.wait('@getUsers')

    cy.get('[data-cy=user-name]').should('have.length', 2)
    cy.get('[data-cy=user-name]').first().should('contain.text', 'Alice')
  })
})
OutputSuccess
Important Notes

Always give your stub an alias with .as() to wait for it easily.

Use fixtures to keep stub data clean and reusable.

Stubbing helps tests run faster and more reliably by avoiding real network calls.

Summary

Stubbing fakes server responses to test your app without a real backend.

Use cy.intercept() with method, url, and response to stub.

Alias stubs to wait for them and check app behavior.

Practice

(1/5)
1. What is the main purpose of stubbing responses in Cypress testing?
easy
A. To fake server responses so tests run without a real backend
B. To speed up the browser rendering process
C. To automatically generate test data
D. To record user interactions for playback

Solution

  1. Step 1: Understand stubbing concept

    Stubbing means faking server responses so the app can be tested without a real backend.
  2. Step 2: Identify purpose in Cypress

    Cypress uses stubbing to isolate frontend tests from backend dependencies, making tests faster and more reliable.
  3. Final Answer:

    To fake server responses so tests run without a real backend -> Option A
  4. Quick Check:

    Stubbing = Fake server response [OK]
Hint: Stubbing fakes backend responses for isolated frontend tests [OK]
Common Mistakes:
  • Thinking stubbing speeds up browser rendering
  • Confusing stubbing with test data generation
  • Believing stubbing records user actions
2. Which of the following is the correct syntax to stub a GET request to '/api/data' with Cypress?
easy
A. cy.stub('GET', '/api/data', { fixture: 'data.json' })
B. cy.route('GET', '/api/data', { fixture: 'data.json' })
C. cy.intercept('GET', '/api/data', { fixture: 'data.json' })
D. cy.mock('GET', '/api/data', { fixture: 'data.json' })

Solution

  1. Step 1: Identify correct Cypress command

    The current Cypress command to stub network requests is cy.intercept().
  2. Step 2: Check method and parameters

    Using cy.intercept('GET', '/api/data', { fixture: 'data.json' }) correctly stubs a GET request with a fixture response.
  3. Final Answer:

    cy.intercept('GET', '/api/data', { fixture: 'data.json' }) -> Option C
  4. Quick Check:

    Use cy.intercept for stubbing requests [OK]
Hint: Use cy.intercept for stubbing, not cy.stub or cy.route [OK]
Common Mistakes:
  • Using cy.stub instead of cy.intercept
  • Using deprecated cy.route command
  • Using cy.mock which does not exist in Cypress
3. Given the code below, what will be the output of the test assertion?
cy.intercept('GET', '/users', { body: [{ id: 1, name: 'Alice' }] }).as('getUsers');
cy.visit('/users');
cy.wait('@getUsers').its('response.body[0].name').should('equal', 'Alice');
medium
A. Test passes because the stubbed response matches 'Alice'
B. Test fails because the alias '@getUsers' is not defined
C. Test fails because the response body is empty
D. Test throws a syntax error due to incorrect intercept usage

Solution

  1. Step 1: Analyze the intercept stub

    The intercept stubs a GET request to '/users' with a response body containing one user named 'Alice'.
  2. Step 2: Check the wait and assertion

    The test waits for '@getUsers' and asserts the first user's name equals 'Alice', which matches the stub.
  3. Final Answer:

    Test passes because the stubbed response matches 'Alice' -> Option A
  4. Quick Check:

    Stub response matches assertion = pass [OK]
Hint: Alias stub and assert matching response for pass [OK]
Common Mistakes:
  • Assuming alias is undefined without .as()
  • Thinking response body is empty
  • Confusing syntax of cy.intercept
4. Identify the error in the following Cypress stub code:
cy.intercept('POST', '/login', { statusCode: 200, body: { token: 'abc123' } });
cy.visit('/login');
cy.wait('@loginRequest');
medium
A. cy.visit must come before cy.intercept
B. The HTTP method 'POST' is invalid in cy.intercept
C. The response body must be a string, not an object
D. The alias '@loginRequest' is missing because the intercept was not aliased

Solution

  1. Step 1: Check alias usage

    The intercept is defined but not given an alias using .as(), so '@loginRequest' does not exist.
  2. Step 2: Understand wait on alias

    Waiting on '@loginRequest' fails because the alias was never created.
  3. Final Answer:

    The alias '@loginRequest' is missing because the intercept was not aliased -> Option D
  4. Quick Check:

    Alias missing causes wait failure [OK]
Hint: Always alias intercept with .as() before waiting [OK]
Common Mistakes:
  • Forgetting to add .as() to intercept
  • Thinking POST is invalid method
  • Believing response body must be string
5. You want to stub a GET request to '/products' that returns different responses based on a query parameter 'category'. Which is the best way to implement this in Cypress?
hard
A. Create multiple cy.intercept calls with the same URL but different responses
B. Use cy.intercept with a function handler to check req.query.category and send different responses
C. Use cy.intercept with a static response ignoring query parameters
D. Use cy.route with a fixture file for all categories

Solution

  1. Step 1: Understand dynamic stubbing need

    Different responses based on query parameters require conditional logic in the stub.
  2. Step 2: Use function handler in cy.intercept

    cy.intercept supports a function to inspect the request and send custom responses based on req.query.category.
  3. Final Answer:

    Use cy.intercept with a function handler to check req.query.category and send different responses -> Option B
  4. Quick Check:

    Function handler enables dynamic stubbing [OK]
Hint: Use function in cy.intercept for dynamic responses [OK]
Common Mistakes:
  • Trying multiple intercepts with same URL (only last applies)
  • Ignoring query parameters in stub
  • Using deprecated cy.route instead of cy.intercept
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard