Bird
Raised Fist0
Cypresstesting~10 mins

Asserting response bodies in Cypress - Test Execution Trace

Choose your learning style10 modes available
Test Overview

This test sends a GET request to a sample API endpoint and verifies that the response body contains the expected data.

Test Code - Cypress
Cypress
describe('API Response Body Assertion', () => {
  it('should verify the response body contains expected user data', () => {
    cy.request('https://jsonplaceholder.typicode.com/users/1')
      .then((response) => {
        expect(response.status).to.equal(200);
        expect(response.body).to.have.property('id', 1);
        expect(response.body).to.have.property('username', 'Bret');
      });
  });
});
Execution Trace - 6 Steps
StepActionSystem StateAssertionResult
1Test startsCypress test runner initialized—PASS
2Sends GET request to https://jsonplaceholder.typicode.com/users/1Request sent, waiting for response—PASS
3Receives response with status 200 and JSON bodyResponse received with user dataCheck response.status equals 200PASS
4Asserts response body has property 'id' with value 1Response body contains user objectresponse.body.id === 1PASS
5Asserts response body has property 'username' with value 'Bret'Response body contains user objectresponse.body.username === 'Bret'PASS
6Test ends successfullyAll assertions passed—PASS
Failure Scenario
Failing Condition: Response body does not contain the expected 'username' property with value 'Bret'
Execution Trace Quiz - 3 Questions
Test your understanding
What does the test verify about the response status?
AIt checks that the status code is 500
BIt checks that the status code is 404
CIt checks that the status code is 200
DIt does not check the status code
Key Result
Always assert both the HTTP status code and key properties in the response body to ensure the API returns the expected data.

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