Bird
Raised Fist0
Cypresstesting~5 mins

Props and event testing in Cypress

Choose your learning style10 modes available
Introduction

We test props and events to make sure components get the right data and respond correctly when users interact.

When you want to check if a component shows the right text or data passed as props.
When you want to verify a button click triggers the correct event handler.
When you want to confirm a form input updates state through events.
When you want to test if a child component receives the correct props from its parent.
Syntax
Cypress
cy.mount(<Component propName={value} />)
cy.get('selector').click()
cy.get('selector').should('have.text', 'expected text')
cy.spy(object, 'method')
cy.wrap(spy).should('have.been.called')

Use cy.mount() to render components with props in Cypress component testing.

Use cy.spy() to watch event handler calls and cy.wrap() to assert they happened.

Examples
This checks if the Button component shows the label passed as a prop.
Cypress
cy.mount(<Button label="Click me" />)
cy.get('button').should('have.text', 'Click me')
This tests if clicking the button calls the onClick event handler.
Cypress
const onClick = cy.spy().as('clickSpy')
cy.mount(<Button onClick={onClick} />)
cy.get('button').click()
cy.get('@clickSpy').should('have.been.called')
Sample Program

This test suite mounts a Button component twice: once to check the label prop, and once to check the click event calls the handler.

Cypress
import React from 'react'
import { mount } from 'cypress/react'

function Button({ label, onClick }) {
  return <button onClick={onClick}>{label}</button>
}

describe('Button component', () => {
  it('shows the label prop', () => {
    mount(<Button label="Press me" />)
    cy.get('button').should('have.text', 'Press me')
  })

  it('calls onClick when clicked', () => {
    const onClick = cy.spy().as('clickSpy')
    mount(<Button label="Press me" onClick={onClick} />)
    cy.get('button').click()
    cy.get('@clickSpy').should('have.been.called')
  })
})
OutputSuccess
Important Notes

Always use clear selectors like element tags or data attributes for locating elements.

Spies help confirm event handlers run without changing component code.

Mount components fresh in each test to avoid state leaks.

Summary

Props testing checks if components display or use data correctly.

Event testing confirms user actions trigger the right functions.

Cypress spies and mount make these tests easy and reliable.

Practice

(1/5)
1. What is the main purpose of props testing in Cypress component tests?
easy
A. To verify that components receive and display data correctly
B. To check if the component's CSS styles are applied
C. To test if the component renders without errors
D. To measure the performance of component rendering

Solution

  1. Step 1: Understand what props are

    Props are data passed to components to control their behavior or display.
  2. Step 2: Identify the goal of props testing

    Props testing ensures the component uses and shows this data correctly.
  3. Final Answer:

    To verify that components receive and display data correctly -> Option A
  4. Quick Check:

    Props testing = verify data usage [OK]
Hint: Props testing checks data passed to components [OK]
Common Mistakes:
  • Confusing props testing with style or performance testing
  • Thinking props testing checks event handlers
  • Assuming props testing is about rendering errors
2. Which Cypress command is used to spy on an event handler function passed as a prop?
easy
A. cy.spy()
B. cy.stub()
C. cy.mount()
D. cy.visit()

Solution

  1. Step 1: Recall Cypress commands for spying

    cy.spy() creates a spy to watch function calls without changing behavior.
  2. Step 2: Match command to event handler spying

    Spying on event handlers uses cy.spy() to check if they were called.
  3. Final Answer:

    cy.spy() -> Option A
  4. Quick Check:

    Spy event handler = cy.spy() [OK]
Hint: Use cy.spy() to watch function calls [OK]
Common Mistakes:
  • Using cy.stub() which replaces function behavior
  • Confusing cy.mount() with spying
  • Using cy.visit() which is for page navigation
3. Given this Cypress test snippet:
const onClick = cy.spy();
cy.mount();
cy.get('button').click();
expect(onClick).to.have.been.calledOnce();

What will be the test result?
medium
A. Test passes because the click triggers onClick once
B. Test passes but onClick is called multiple times
C. Test fails because onClick is never called
D. Test fails due to syntax error in expect statement

Solution

  1. Step 1: Analyze the spy and mount setup

    onClick is a spy passed as prop; Button is mounted with it.
  2. Step 2: Check the assertion syntax

    The assertion uses calledOnce() which is incorrect syntax; it should be calledOnce without parentheses.
  3. Final Answer:

    Test fails due to syntax error in expect statement -> Option D
  4. Quick Check:

    calledOnce() is invalid syntax [OK]
Hint: Use calledOnce without () in assertions [OK]
Common Mistakes:
  • Adding parentheses after calledOnce
  • Assuming spy is not called when it is
  • Ignoring syntax errors in assertions
4. You wrote this Cypress test to check a button click event:
const onClick = cy.spy();
cy.mount();
cy.get('button').click();
expect(onClick).to.have.been.called();

The test fails. What is the likely problem?
medium
A. The spy was not created correctly with cy.spy()
B. The event handler prop name is wrong
C. The assertion incorrectly uses parentheses after called
D. The button selector is incorrect

Solution

  1. Step 1: Check spy creation and usage

    Spy is created correctly with cy.spy() and passed as prop.
  2. Step 2: Review assertion syntax

    called is a property, not a function, so no parentheses should be used; parentheses cause failure.
  3. Final Answer:

    The assertion incorrectly uses parentheses after called -> Option C
  4. Quick Check:

    called is property, no () [OK]
Hint: Don't add () after called in assertions [OK]
Common Mistakes:
  • Using called() instead of called
  • Incorrect selector causing no click
  • Wrong prop name like onClickHandler
5. You want to test a component that receives a disabled prop and an onSubmit event handler prop. Which Cypress test approach correctly verifies that clicking the submit button calls onSubmit only when disabled is false?
hard
A. Mount component with disabled=true and spy on onSubmit; click button and assert spy called once; then mount with disabled=false and assert spy not called
B. Mount component with disabled=false and spy on onSubmit; click button and assert spy called once; then mount with disabled=true and assert spy not called on click
C. Mount component once with disabled=false and spy on onSubmit; click button twice and assert spy called twice regardless of disabled prop
D. Mount component with disabled=false without spy; click button and check UI changes only

Solution

  1. Step 1: Test enabled state with spy

    Mount with disabled=false, spy on onSubmit, click button, expect spy called once.
  2. Step 2: Test disabled state with spy

    Mount with disabled=true, click button, expect spy not called to confirm no event triggered.
  3. Final Answer:

    Mount component with disabled=false and spy on onSubmit; click button and assert spy called once; then mount with disabled=true and assert spy not called on click -> Option B
  4. Quick Check:

    Test both states with spy to confirm event firing [OK]
Hint: Test enabled and disabled states separately with spy [OK]
Common Mistakes:
  • Testing only one disabled state
  • Not using spy to check event calls
  • Assuming event fires regardless of disabled prop
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