We test props and events to make sure components get the right data and respond correctly when users interact.
Props and event testing in 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.
cy.mount(<Button label="Click me" />) cy.get('button').should('have.text', 'Click me')
const onClick = cy.spy().as('clickSpy') cy.mount(<Button onClick={onClick} />) cy.get('button').click() cy.get('@clickSpy').should('have.been.called')
This test suite mounts a Button component twice: once to check the label prop, and once to check the click event calls the handler.
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') }) })
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.
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
props testing in Cypress component tests?Solution
Step 1: Understand what props are
Props are data passed to components to control their behavior or display.Step 2: Identify the goal of props testing
Props testing ensures the component uses and shows this data correctly.Final Answer:
To verify that components receive and display data correctly -> Option AQuick Check:
Props testing = verify data usage [OK]
- Confusing props testing with style or performance testing
- Thinking props testing checks event handlers
- Assuming props testing is about rendering errors
Solution
Step 1: Recall Cypress commands for spying
cy.spy() creates a spy to watch function calls without changing behavior.Step 2: Match command to event handler spying
Spying on event handlers uses cy.spy() to check if they were called.Final Answer:
cy.spy() -> Option AQuick Check:
Spy event handler = cy.spy() [OK]
- Using cy.stub() which replaces function behavior
- Confusing cy.mount() with spying
- Using cy.visit() which is for page navigation
const onClick = cy.spy();
cy.mount();
cy.get('button').click();
expect(onClick).to.have.been.calledOnce();What will be the test result?
Solution
Step 1: Analyze the spy and mount setup
onClick is a spy passed as prop; Button is mounted with it.Step 2: Check the assertion syntax
The assertion uses calledOnce() which is incorrect syntax; it should be calledOnce without parentheses.Final Answer:
Test fails due to syntax error in expect statement -> Option DQuick Check:
calledOnce() is invalid syntax [OK]
- Adding parentheses after calledOnce
- Assuming spy is not called when it is
- Ignoring syntax errors in assertions
const onClick = cy.spy();
cy.mount();
cy.get('button').click();
expect(onClick).to.have.been.called();The test fails. What is the likely problem?
Solution
Step 1: Check spy creation and usage
Spy is created correctly with cy.spy() and passed as prop.Step 2: Review assertion syntax
called is a property, not a function, so no parentheses should be used; parentheses cause failure.Final Answer:
The assertion incorrectly uses parentheses after called -> Option CQuick Check:
called is property, no () [OK]
- Using called() instead of called
- Incorrect selector causing no click
- Wrong prop name like onClickHandler
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?Solution
Step 1: Test enabled state with spy
Mount with disabled=false, spy on onSubmit, click button, expect spy called once.Step 2: Test disabled state with spy
Mount with disabled=true, click button, expect spy not called to confirm no event triggered.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 BQuick Check:
Test both states with spy to confirm event firing [OK]
- Testing only one disabled state
- Not using spy to check event calls
- Assuming event fires regardless of disabled prop
Ready to prove it?
Pass the test and this pattern moves unknown
