Back to Blog
Technical QA
January 29, 2026
10 min read
1,804 words

How do I wait for a network response before asserting in Cypress?

Why This Matters The Question When writing automated tests with Cypress, it's crucial to ensure that your assertions only run after the network request has completed. In this …

How do I wait for a network response before asserting in Cypress?

Why This Matters

The Question

When writing automated tests with Cypress, it's crucial to ensure that your assertions only run after the network request has completed. In this article, we will explore how to achieve this by using cy.wait() and other related checks, delving deeper into pitfalls, edge cases, verification steps, interview follow-ups, and related checks.

Short Answer

To wait for a network response before asserting in Cypress, use cy.wait() along with the networkId or url option to target specific requests.

cy.visit('http://your-test-page.com');

// Wait for the 'your-network-request' request to complete before continuing
cy.wait('your-network-request');

// Perform your assertions here

Deep Answer

What to do now

Use cy.wait() to pause test execution until a specific network request has completed. Pass the request's name or URL as an argument to target it accurately. If you need to wait for multiple requests in sequence, use the cy.waitAll() and cy.waitAny() functions.

Why it works

When you call cy.visit(), Cypress initiates various events, including network requests. However, these events don't necessarily happen in the order you might expect. To ensure that your assertions only run after a specific request has completed, you can use cy.wait(). This function pauses test execution until the specified network request is finished.

When it breaks

If you provide an incorrect network request name or URL, Cypress won't find the target request, and your test will wait indefinitely. To avoid this, double-check that your cy.wait() arguments are correct. You can also use other options with cy.wait(), such as type (for XHR requests) or timeout (to set a maximum waiting time).

How to verify

To confirm that your test is waiting for the correct network request, you can add console logs or assertions within the test before and after the cy.wait() call. This will help you identify if the request has completed as expected.

cy.visit('http://your-test-page.com');

// Log the URLs of all network requests
cy.log('Initial network requests:', JSON.stringify(cy.requests));

// Wait for the 'your-network-request' request to complete before continuing
cy.wait('your-network-request');

// Log the updated network requests after the wait
cy.log('Network requests after wait:', JSON.stringify(cy.requests));

Pitfalls And Edge Cases

  • If you provide an incorrect network request name or URL, Cypress won't find the target request, and your test will wait indefinitely. Double-check your arguments to avoid this issue.
  • Solution: Use the networkId option for unique requests, or ensure that the provided name or URL is accurate and specific enough to identify the correct network request.
  • When using cy.wait(), ensure that the maximum waiting time (set with the timeout option) is long enough for your network requests to complete. If a request takes longer than the specified timeout, Cypress will throw an error.
  • Solution: Adjust the timeout value based on the expected duration of your network requests. You can also use cy.wait('@requestName').its('duration').should('be.atMost', maxDuration) to set a maximum request duration.
  • If you have multiple requests with the same name or URL, cy.wait() might not wait for the intended request. In this case, use the networkId option to target specific requests based on their unique identifiers.
  • Solution: Use the networkId option to ensure that the correct network request is targeted, even if multiple requests have the same name or URL.
  • When using cy.waitAll(), ensure that all specified network requests are completed before continuing with your assertions. If any of the requests fail or take longer than the specified timeout, the entire test will wait until they are resolved.
  • Solution: Use cy.waitAll('@request1', '@request2').then(() => { /* Your assertions here */ }) to continue with your assertions only after all specified network requests have completed.
  • When using cy.waitAny(), be aware that your test will continue as soon as one of the specified network requests is completed. This means that if multiple requests complete simultaneously, the order in which they are resolved might not match the order you expect.
  • Solution: Use cy.waitAny(['@request1', '@request2']).then(() => { /* Your assertions here */ }) to continue with your assertions as soon as any of the specified network requests is completed, even if they complete simultaneously.

Related Checks

Interview Follow-ups

  1. What are some common issues that can arise when using cy.wait(), and how can they be addressed?
  • Incorrect network request name or URL: Double-check your arguments to avoid this issue. Use the networkId option for unique requests, or ensure that the provided name or URL is accurate and specific enough to identify the correct network request.
  • Timeout exceeded: Adjust the timeout value based on the expected duration of your network requests. You can also use cy.wait('@requestName').its('duration').should('be.atMost', maxDuration) to set a maximum request duration.
  • Multiple requests with the same name or URL: Use the networkId option to ensure that the correct network request is targeted, even if multiple requests have the same name or URL.
  1. How can you ensure that your tests wait for the correct network request in cases where multiple requests have the same name or URL?

Use the networkId option to target specific requests based on their unique identifiers.

  1. Can you explain the difference between cy.waitAll() and cy.waitAny(), and when should each be used?
  • cy.waitAll() waits for all specified network requests to complete before continuing with your assertions. Use this function when you need to ensure that all requested resources have loaded.
  • cy.waitAny() continues as soon as one of the specified network requests is completed. Use this function when you want to continue with your test even if some requests fail or take longer than expected.
  1. What are some best practices for using cy.wait() in your tests to ensure efficient and reliable test execution?
  • Provide accurate network request names or URLs to avoid waiting indefinitely. Use the networkId option for unique requests if necessary.
  • Set a reasonable timeout that is long enough for your network requests to complete but not so long as to unnecessarily slow down your test execution.
  • Use the networkId option when multiple requests have the same name or URL, and ensure that it's specific enough to target the correct request.
  • Combine cy.waitAll() and cy.waitAny() with other Cypress commands like cy.get(), cy.contains(), and cy.type() to create robust tests that perform assertions on both the DOM and network responses.
  1. How can you verify that a network request has been completed successfully, and what assertions might you use in this context?
  • Check the response status code (e.g., cy.request('your-network-request').its('status').should('equal', 200)).
  • Verify that the expected data is present in the response body (e.g., cy.request('your-network-request').its('body').should('include', 'expected data')).
  • Check that cookies or local storage values have been updated as expected after the network request completes.
  • Use cy.get() to verify that elements on the page update correctly based on the network response, such as checking the visibility of a loading spinner before and after the request completes.

Additional Information

Network request types

Cypress supports several types of network requests, including XHR (XMLHttpRequest), fetch, and WebSocket. You can use cy.wait() with each of these types by providing the appropriate options. For example:

// Wait for an XHR request to complete
cy.wait('xhr:your-network-request');

// Wait for a fetch request to complete
cy.wait('fetch:your-network-request');

// Wait for a WebSocket connection to close
cy.wait('webSocketConnectionClose');

Network request filters

In some cases, you may want to wait for specific types of network requests or requests that match certain criteria. Cypress provides several options for filtering network requests:

  • type: Filter by the type of network request (e.g., XHR, fetch, WebSocket).
  • url: Filter by the request URL.
  • networkId: Filter by the unique identifier of the network request. This is especially useful when multiple requests have the same name or URL.
  • responseStatus: Filter by the response status code (e.g., 200, 404).
  • responseTime: Filter by the time it took for the server to respond to the network request.

You can combine these options to create more specific filters. For example:

// Wait for an XHR request with a response status of 200 and a URL matching /api/users
cy.wait('xhr', { url: '/api/users' }, 'responseStatus', 200);

Network request aliases

In complex tests, you may want to reuse network requests across multiple assertions or steps. Cypress allows you to create aliases for network requests using the cy.intercept() function. Once a request is aliased, you can use its alias name in place of the original request when calling cy.wait().

// Intercept the API call and alias it as 'userRequest'
cy.intercept('GET', '/api/users', {
fixture: 'users.json'
}).as('userRequest');

// Wait for the aliased network request to complete before continuing
cy.wait('@userRequest');

Pitfalls And Edge Cases

While using cy.wait(), there are certain pitfalls and edge cases that you should be aware of:

  1. Incorrect Network Request Name or URL: Providing an incorrect network request name or URL may cause the test to wait indefinitely for a non-existent request. To avoid this, double-check that your cy.wait() arguments are accurate and specific enough to identify the correct network request.
  • Solution: Use the networkId option for unique requests, or ensure that the provided name or URL is accurate and specific enough to identify the correct network request.
  1. Timeout Exceeded: If a network request takes longer than the specified timeout, Cypress will throw an error. To address this issue, adjust the timeout value based on the expected duration of your network requests. You can also use cy.wait('@requestName').its('duration').should('be.atMost', maxDuration) to set a maximum request duration.
  1. Multiple Requests with the Same Name or URL: When using cy.wait(), Cypress might not wait for the intended request if multiple requests have the same name or URL. In this case, use the networkId option to target specific requests based on their unique identifiers.
  • Solution: Use the networkId option to ensure that the correct network request is targeted, even if multiple requests have the same name or URL.
  1. Using cy.waitAll() and cy.waitAny(): Be aware that both cy.waitAll() and cy.waitAny() have their own specific use cases:
  • cy.waitAll() waits for all specified network requests to complete before continuing with your assertions. Use this function when you need to ensure that all requested resources have loaded.
  • cy.waitAny() continues as soon as one of the specified network requests is completed. Use this function when you want to continue with your test even if some requests fail or take longer than expected.
  1. Assertions on Network Responses: It's essential to verify that a network request has been completed successfully and assert on the response data as needed. Here are some common assertions you can use:
  • Check the response status code (e.g., cy.request('your-network-request').its('status').should('equal', 200)).
  • Verify that the expected data is present in the response body (e.g., cy.request('your-network-request').its('body').should('include', 'expected data')).
  • Check that cookies or local storage values have been updated as expected after the network request completes.
  • Use cy.get() to verify that elements on the page update correctly based on the network response, such as checking the visibility of a loading spinner before and after the request completes.

Related Checks

Tags:Technical QATutorialGuide
X

Written by XQA Team

Our team of experts delivers insights on technology, business, and design. We are dedicated to helping you build better products and scale your business.