Bird
Raised Fist0
Cypresstesting~3 mins

Why Waiting for requests (cy.wait with alias) in Cypress? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if your tests could wait just the right amount of time every time, never too long or too short?

The Scenario

Imagine testing a website where you click a button and wait for data to load. You try to check the page immediately, but sometimes the data is not ready yet. You keep refreshing or guessing when to check.

The Problem

Manually guessing wait times is slow and unreliable. Sometimes you wait too long, wasting time. Other times you check too soon and get wrong results. This causes flaky tests and frustration.

The Solution

Using cy.wait with an alias lets you pause the test exactly until the needed request finishes. This means your test waits smartly, not too long or too short, making tests stable and faster.

Before vs After
✗ Before
cy.get('button').click();
cy.wait(5000); // guess wait time
cy.get('.data').should('contain', 'Expected Text')
✓ After
cy.intercept('GET', '/data').as('getData');
cy.get('button').click();
cy.wait('@getData');
cy.get('.data').should('contain', 'Expected Text')
What It Enables

It enables writing tests that wait exactly for network responses, making tests reliable and efficient.

Real Life Example

Testing a shopping site where clicking 'Load More' fetches new products. Using cy.wait with alias ensures the test waits for the products to load before checking them.

Key Takeaways

Manual waiting guesses cause slow and flaky tests.

cy.wait with alias waits exactly for requests to finish.

This makes tests stable, faster, and easier to maintain.

Practice

(1/5)
1. What is the main purpose of using cy.wait() with an alias in Cypress tests?
easy
A. To log the test results to the console
B. To pause the test until a specific network request finishes
C. To reload the page automatically
D. To skip a test step temporarily

Solution

  1. Step 1: Understand cy.wait() with alias

    The cy.wait() command pauses the test until the network request with the given alias completes.
  2. Step 2: Purpose of waiting for requests

    This ensures the test runs only after the needed data is loaded, making tests reliable.
  3. Final Answer:

    To pause the test until a specific network request finishes -> Option B
  4. Quick Check:

    Waiting for request = pause test until done [OK]
Hint: Wait pauses test until named request finishes [OK]
Common Mistakes:
  • Thinking cy.wait skips steps
  • Confusing cy.wait with page reload
  • Using cy.wait without alias
2. Which of the following is the correct syntax to alias a network request in Cypress?
easy
A. cy.intercept('/api/data').alias('getData')
B. cy.route('/api/data').alias('getData')
C. cy.wait('/api/data').as('getData')
D. cy.intercept('/api/data').as('getData')

Solution

  1. Step 1: Identify correct alias method

    In Cypress, cy.intercept() is used to spy or stub requests, and .as() assigns an alias.
  2. Step 2: Check syntax correctness

    cy.intercept('/api/data').as('getData') uses cy.intercept('/api/data').as('getData'), which is the correct syntax.
  3. Final Answer:

    cy.intercept('/api/data').as('getData') -> Option D
  4. Quick Check:

    Alias uses .as() after intercept [OK]
Hint: Use .as() to alias intercept, not .alias() [OK]
Common Mistakes:
  • Using .alias() instead of .as()
  • Trying to alias cy.wait instead of cy.intercept
  • Using deprecated cy.route instead of cy.intercept
3. Given the code below, what will be the output in the test if the request takes 500ms to complete?
cy.intercept('GET', '/users').as('getUsers')
cy.visit('/users')
cy.wait('@getUsers').then(({ response }) => {
  console.log(response.status)
})
medium
A. 200
B. undefined
C. 500
D. 404

Solution

  1. Step 1: Understand intercept and wait behavior

    The cy.intercept() spies on the GET request to '/users' and aliases it as 'getUsers'.
  2. Step 2: Analyze the wait and response

    cy.wait('@getUsers') waits for the request to finish, then logs the response.status. A successful GET usually returns 200.
  3. Final Answer:

    200 -> Option A
  4. Quick Check:

    Wait logs response status 200 [OK]
Hint: Wait returns response object with status [OK]
Common Mistakes:
  • Confusing request duration with status code
  • Expecting wait to return undefined
  • Assuming 404 if request is slow
4. Identify the error in the following Cypress test code:
cy.intercept('POST', '/login').as('loginRequest')
cy.get('button#submit').click()
cy.wait('loginRequest')
medium
A. Missing @ symbol in cy.wait alias
B. Incorrect HTTP method in intercept
C. Alias name should be in double quotes
D. cy.get selector is invalid

Solution

  1. Step 1: Check cy.wait usage

    The cy.wait() command requires the alias to be prefixed with '@' to identify the request alias.
  2. Step 2: Identify the error

    The code uses cy.wait('loginRequest') missing the '@', which causes Cypress to not recognize the alias.
  3. Final Answer:

    Missing @ symbol in cy.wait alias -> Option A
  4. Quick Check:

    Alias in cy.wait needs '@' prefix [OK]
Hint: Always prefix alias with '@' in cy.wait [OK]
Common Mistakes:
  • Omitting '@' before alias in cy.wait
  • Using wrong HTTP method in intercept
  • Thinking quotes affect alias recognition
5. You want to test that after clicking a button, a POST request to '/submit' completes successfully before checking the page content. Which is the best way to write this in Cypress?
hard
A. cy.intercept('POST', '/submit').as('submitRequest') cy.wait('@submitRequest') cy.get('button#send').click() cy.contains('Success').should('be.visible')
B. cy.get('button#send').click() cy.wait('@submitRequest') cy.intercept('POST', '/submit').as('submitRequest') cy.contains('Success').should('be.visible')
C. cy.intercept('POST', '/submit').as('submitRequest') cy.get('button#send').click() cy.wait('@submitRequest') cy.contains('Success').should('be.visible')
D. cy.get('button#send').click() cy.contains('Success').should('be.visible') cy.intercept('POST', '/submit').as('submitRequest') cy.wait('@submitRequest')

Solution

  1. Step 1: Setup intercept before action

    You must call cy.intercept() and alias before triggering the request by clicking the button.
  2. Step 2: Wait for request before assertions

    Use cy.wait('@submitRequest') after clicking to pause until the POST completes, then check page content.
  3. Final Answer:

    Intercept first, click, wait, then assert success message -> Option C
  4. Quick Check:

    Intercept before action, wait after click [OK]
Hint: Always intercept before triggering request, then wait [OK]
Common Mistakes:
  • Waiting before intercepting
  • Asserting before request finishes
  • Interception after click triggers request
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