Bird
Raised Fist0
Cypresstesting~3 mins

Why Stubbing responses in Cypress? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if your tests never had to wait for a slow or broken server again?

The Scenario

Imagine testing a web app that fetches data from a server. You have to wait for the server to respond every time you test. Sometimes the server is slow or down, so you can't test properly.

The Problem

Manually waiting for real server responses is slow and frustrating. Tests can fail just because the server is unavailable, not because the app is broken. This makes testing unreliable and wastes time.

The Solution

Stubbing responses lets you fake the server replies. You tell your test what data to expect without calling the real server. This makes tests fast, stable, and predictable.

Before vs After
✗ Before
cy.visit('/page');
cy.wait(5000); // waiting for real server response
✓ After
cy.intercept('GET', '/api/data', { fixture: 'data.json' });
cy.visit('/page');
What It Enables

Stubbing responses enables fast, reliable tests that work even when the real server is slow or offline.

Real Life Example

When testing a shopping site, you can stub the product list response to always show the same items. This way, your tests won't break if the real product database changes or is down.

Key Takeaways

Manual testing with real servers is slow and unreliable.

Stubbing responses fakes server data for fast, stable tests.

This helps catch real app bugs without external delays.

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