Bird
Raised Fist0
Cypresstesting~5 mins

Asserting response bodies in Cypress - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of asserting response bodies in Cypress tests?
Asserting response bodies ensures that the data returned from an API or server matches the expected values, confirming the application behaves correctly.
Click to reveal answer
beginner
How do you access the response body in a Cypress test after intercepting a request?
You use the cy.intercept() command to spy on the request, then in the then() callback, access response.body to assert its contents.
Click to reveal answer
beginner
Example: What does this assertion check?
expect(response.body).to.have.property('success', true)
It checks that the response body has a property named success and that its value is true.
Click to reveal answer
intermediate
Why is it important to assert specific fields in the response body rather than the entire body?
Asserting specific fields makes tests more stable and focused, avoiding failures due to unrelated changes or extra data in the response.
Click to reveal answer
beginner
What Cypress command helps you wait for a network request and then assert its response body?
The cy.wait() command waits for the intercepted request to complete, allowing you to access and assert the response body.
Click to reveal answer
Which Cypress command is used to intercept and spy on network requests?
Acy.request()
Bcy.intercept()
Ccy.visit()
Dcy.get()
How do you access the response body inside a cy.intercept() callback?
Aresponse.body
Bresponse.status
Cresponse.headers
Dresponse.url
What does this assertion check?
expect(response.body.data).to.have.length(3)
AResponse body has 3 properties
BResponse body is empty
CResponse status is 3
DResponse body has a data array with 3 items
Why should you avoid asserting the entire response body in tests?
ABecause the entire body may change and cause flaky tests
BBecause Cypress does not support full body assertions
CBecause response bodies are always empty
DBecause assertions slow down tests
Which command waits for a network request to finish before asserting its response?
Acy.visit()
Bcy.get()
Ccy.wait()
Dcy.intercept()
Explain how to assert a JSON response body property in a Cypress test after intercepting a network request.
Think about how to capture and check data returned from the server.
You got /4 concepts.
    Why is it better to assert specific fields in a response body rather than the entire body in Cypress tests?
    Consider how changes in data can affect test reliability.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of asserting response bodies in Cypress tests?
      easy
      A. To check if the UI elements are visible on the page
      B. To verify the server sends the correct data in the response body
      C. To measure the page load time
      D. To test the browser compatibility

      Solution

      1. Step 1: Understand response body assertion

        Asserting response bodies means checking the data returned by the server is correct and as expected.
      2. Step 2: Identify the purpose in Cypress tests

        Cypress uses assertions on response bodies to confirm the server sends the right data, not UI or performance checks.
      3. Final Answer:

        To verify the server sends the correct data in the response body -> Option B
      4. Quick Check:

        Response body assertion = verify server data [OK]
      Hint: Response body assertions check server data, not UI or speed [OK]
      Common Mistakes:
      • Confusing response body with UI element checks
      • Thinking it measures performance
      • Assuming it tests browser features
      2. Which of the following is the correct syntax to assert that the response body has a property name equal to "John" in Cypress?
      easy
      A. cy.request('/api/user').expect('body.name').to.equal('John')
      B. cy.request('/api/user').body.should('contain', 'name', 'John')
      C. cy.request('/api/user').its('body').should('have.property', 'name', 'John')
      D. cy.request('/api/user').should('body.name', 'John')

      Solution

      1. Step 1: Review Cypress chaining syntax

        In Cypress, cy.request() returns a response object. To assert a property in the body, use its('body') to access it.
      2. Step 2: Use should('have.property', key, value) for assertion

        The correct way to check a property and its value is should('have.property', 'name', 'John').
      3. Final Answer:

        cy.request('/api/user').its('body').should('have.property', 'name', 'John') -> Option C
      4. Quick Check:

        Use its('body').should('have.property', key, value) [OK]
      Hint: Use its('body').should('have.property', key, value) for body checks [OK]
      Common Mistakes:
      • Trying to access body directly without its()
      • Using expect() incorrectly inside cy.request chain
      • Wrong method names like expect() or body.should()
      3. Given the following Cypress code, what will be the result of the assertion?
      cy.request('/api/data').then((response) => {
        expect(response.status).to.eq(200)
        expect(response.body.items).to.have.length(3)
      })
      medium
      A. The test passes if the response status is 200 and items array has exactly 3 elements
      B. The test fails if the response status is 200 but items array has more than 3 elements
      C. The test passes regardless of the items array length
      D. The test fails if the response status is not 404

      Solution

      1. Step 1: Analyze the status code assertion

        The code expects response.status to equal 200, so the server must respond with HTTP 200.
      2. Step 2: Analyze the items array length assertion

        The code expects response.body.items to have exactly 3 elements. If it has more or less, the test fails.
      3. Final Answer:

        The test passes if the response status is 200 and items array has exactly 3 elements -> Option A
      4. Quick Check:

        Status 200 and items length 3 = pass [OK]
      Hint: Both status and body length must match exactly for pass [OK]
      Common Mistakes:
      • Ignoring the length check on items array
      • Confusing status 200 with 404
      • Assuming partial matches pass
      4. Identify the error in this Cypress test code that asserts the response body property success is true:
      cy.request('/api/submit').then((response) => {
        expect(response.body.success).to.be.true()
      })
      medium
      A. The cy.request method is missing a URL
      B. The property success does not exist in response.body
      C. The then callback should use response.body.success()
      D. The assertion should be to.be.true without parentheses

      Solution

      1. Step 1: Check the assertion syntax

        In Chai assertions used by Cypress, to.be.true is a property, not a function, so it should not have parentheses.
      2. Step 2: Confirm other parts are correct

        The URL is provided, and accessing response.body.success is valid if the property exists.
      3. Final Answer:

        The assertion should be to.be.true without parentheses -> Option D
      4. Quick Check:

        Use to.be.true without () for boolean assertions [OK]
      Hint: Boolean assertions use to.be.true without parentheses [OK]
      Common Mistakes:
      • Adding parentheses to boolean assertions
      • Assuming success is a function
      • Missing URL in cy.request
      5. You want to assert that the response body contains a nested object with a user's id equal to 5 and a roles array containing "admin". Which Cypress assertion correctly checks both conditions?
      hard
      A. cy.request('/api/user/5').its('body').should((body) => { expect(body.id).to.eq(5) expect(body.roles).to.include('admin') })
      B. cy.request('/api/user/5').should('body.id', 5).and('body.roles', 'admin')
      C. cy.request('/api/user/5').then((response) => { expect(response.body.id).to.equal(5) expect(response.body.roles).to.have.length(1) })
      D. cy.request('/api/user/5').its('body').should('have.property', 'id', 5).and('have.property', 'roles', 'admin')

      Solution

      1. Step 1: Understand nested assertions with callback

        Using should with a callback allows multiple assertions on the body object.
      2. Step 2: Check each assertion correctness

        expect(body.id).to.eq(5) checks the id correctly. expect(body.roles).to.include('admin') checks the roles array contains 'admin'.
      3. Step 3: Identify incorrect options

        cy.request('/api/user/5').should('body.id', 5).and('body.roles', 'admin') uses invalid chaining syntax. cy.request('/api/user/5').then((response) => { expect(response.body.id).to.equal(5) expect(response.body.roles).to.have.length(1) }) misses checking 'admin' in roles. cy.request('/api/user/5').its('body').should('have.property', 'id', 5).and('have.property', 'roles', 'admin') wrongly checks roles as a property equal to string 'admin'.
      4. Final Answer:

        cy.request('/api/user/5').its('body').should((body) => { expect(body.id).to.eq(5) expect(body.roles).to.include('admin') }) -> Option A
      5. Quick Check:

        Use callback in should for multiple nested assertions [OK]
      Hint: Use should callback for multiple nested property checks [OK]
      Common Mistakes:
      • Trying to chain multiple properties incorrectly
      • Checking array length instead of content
      • Using have.property with array content as string
      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