Bird
Raised Fist0
Cypresstesting~20 mins

Component test setup in Cypress - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Component Test Setup Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Cypress component test setup code?
Consider this Cypress test setup for a React component. What will be the test result after running this code?
Cypress
import { mount } from 'cypress/react';

describe('Button component', () => {
  it('renders with correct label', () => {
    mount(<button>Click me</button>);
    cy.get('button').should('have.text', 'Click me');
  });
});
ATest fails because the button text is empty.
BTest passes because the button text matches 'Click me'.
CTest fails due to a syntax error in the mount function.
DTest fails because the selector 'button' does not find any element.
Attempts:
2 left
💡 Hint
Think about what the mount function does and how Cypress queries elements.
❓ locator
intermediate
1:30remaining
Which locator is best for selecting a button in a Cypress component test?
You want to select a button in a component test for Cypress. Which locator is the best practice to use?
Acy.get('button')
Bcy.get('#submit')
Ccy.get('.btn-primary')
Dcy.get('[data-cy="submit-button"]')
Attempts:
2 left
💡 Hint
Consider maintainability and avoiding brittle selectors.
❓ assertion
advanced
2:00remaining
Which assertion correctly verifies a component's input value in Cypress?
You have an input field rendered in a component test. Which assertion correctly checks that the input's value is 'hello'?
Cypress
import { mount } from 'cypress/react';

mount(<input value="hello" />);
Acy.get('input').should('have.value', 'hello')
Bcy.get('input').should('contain.text', 'hello')
Ccy.get('input').should('have.attr', 'value', 'hello')
Dcy.get('input').should('have.text', 'hello')
Attempts:
2 left
💡 Hint
Think about how input values are accessed in Cypress assertions.
🔧 Debug
advanced
2:30remaining
Why does this Cypress component test fail to find the button?
Look at this test code. Why does the test fail with 'Timed out retrying: Expected to find element: button, but never found it'?
Cypress
import { mount } from 'cypress/react';

describe('MyComponent', () => {
  it('should find the button', () => {
    cy.get('button').should('exist');
    mount(<button>Press</button>);
  });
});
AThe test is missing a wait command before cy.get.
BThe selector 'button' is incorrect and does not match the button element.
CThe mount call happens after the cy.get, so the button is not rendered when searched.
DThe mount function is not imported, causing the test to fail.
Attempts:
2 left
💡 Hint
Think about the order of commands and when elements appear in the DOM.
❓ framework
expert
3:00remaining
Which Cypress configuration is required to enable component testing with React?
You want to run Cypress component tests for React components. Which configuration setting is necessary in cypress.config.js?
Acomponent: { devServer: { framework: 'react', bundler: 'webpack' } }
Bcomponent: { supportFile: false }
Ce2e: { baseUrl: 'http://localhost:3000' }
Dcomponent: { testFiles: '**/*.spec.js' }
Attempts:
2 left
💡 Hint
Think about how Cypress knows which framework and bundler to use for component tests.

Practice

(1/5)
1. What is the main purpose of using mount() in Cypress component testing?
easy
A. To write unit tests for backend APIs
B. To run end-to-end tests on the whole application
C. To load a component inside Cypress for testing
D. To deploy the application to a server

Solution

  1. Step 1: Understand the role of mount()

    mount() is used to load a UI component inside Cypress so you can test it in isolation.
  2. Step 2: Differentiate from other test types

    End-to-end tests run the whole app, but mount() focuses on small parts (components).
  3. Final Answer:

    To load a component inside Cypress for testing -> Option C
  4. Quick Check:

    mount() loads component [OK]
Hint: Remember: mount() loads components, not full apps [OK]
Common Mistakes:
  • Confusing mount() with full app testing
  • Thinking mount() deploys code
  • Mixing component and API testing
2. Which of the following is the correct syntax to prepare a component before each test in Cypress?
easy
A. beforeEach(() => { mount() })
B. beforeAll(() => { mount() })
C. afterEach(() => { mount() })
D. before(() => { mount() })

Solution

  1. Step 1: Identify the correct hook for setup before each test

    beforeEach() runs before every test, ideal for fresh component setup.
  2. Step 2: Confirm syntax correctness

    The syntax beforeEach(() => { mount(<MyComponent />) }) correctly mounts the component before each test.
  3. Final Answer:

    beforeEach(() => { mount(<MyComponent />) }) -> Option A
  4. Quick Check:

    Use beforeEach() for setup [OK]
Hint: Use beforeEach() to reset component before every test [OK]
Common Mistakes:
  • Using beforeAll() which runs only once
  • Using afterEach() which runs after tests
  • Using before() which is deprecated in Cypress
3. Given this Cypress component test code, what will be the output in the test runner?
describe('Button component', () => {
  beforeEach(() => {
    mount(Click me)
  })

  it('checks button text', () => {
    cy.get('button').should('have.text', 'Click me')
  })
})
medium
A. Test passes because button text matches
B. Test fails because button text is missing
C. Test errors due to wrong selector syntax
D. Test is skipped because mount() is missing

Solution

  1. Step 1: Analyze the mount and selector

    The mount() loads a button with text 'Click me'. The selector cy.get('button') correctly targets it.
  2. Step 2: Check the assertion

    The assertion should('have.text', 'Click me') matches the button's text exactly, so it passes.
  3. Final Answer:

    Test passes because button text matches -> Option A
  4. Quick Check:

    Correct selector and text = pass [OK]
Hint: Match selector text exactly for passing assertion [OK]
Common Mistakes:
  • Using wrong selector causing no element found
  • Mismatching text in assertion
  • Forgetting to mount component before test
4. Identify the error in this Cypress component test setup:
describe('Input component', () => {
  beforeEach(() => {
    mount('')
  })

  it('checks placeholder', () => {
    cy.get('input').should('have.attr', 'placeholder', 'Enter name')
  })
})
medium
A. beforeEach() should be replaced with afterEach()
B. mount() should receive JSX, not a string
C. cy.get() selector is incorrect
D. The placeholder attribute is misspelled

Solution

  1. Step 1: Check the argument passed to mount()

    The code passes a string '<input placeholder="Enter name" />' instead of JSX element. mount() expects JSX, not a string.
  2. Step 2: Confirm other parts are correct

    The selector cy.get('input') and attribute check are correct, so no error there.
  3. Final Answer:

    mount() should receive JSX, not a string -> Option B
  4. Quick Check:

    mount() needs JSX, not string [OK]
Hint: Pass JSX, not strings, to mount() [OK]
Common Mistakes:
  • Passing HTML strings instead of JSX to mount()
  • Confusing beforeEach() with afterEach()
  • Using wrong selectors
5. You want to test a component that renders a list of items passed as props. Which setup correctly mounts the component with props before each test?
hard
A. beforeEach(() => { mount() })
B. beforeEach(() => { mount('') })
C. beforeEach(() => { mount(List, { props: { items: ["a", "b"] } }) })
D. beforeEach(() => { mount() })

Solution

  1. Step 1: Understand correct JSX with props

    Passing props in JSX uses syntax like <List items={["a", "b"]} />. This is correct in beforeEach(() => { mount(<List items={["a", "b"]} />) }).
  2. Step 2: Identify incorrect options

    beforeEach(() => { mount('<List items=["a", "b"] />') }) passes a string, not JSX. beforeEach(() => { mount(List, { props: { items: ["a", "b"] } }) }) uses wrong mount signature. beforeEach(() => { mount(<List items="a,b" />) }) passes a string instead of array.
  3. Final Answer:

    beforeEach(() => { mount(<List items={["a", "b"]} />) }) -> Option D
  4. Quick Check:

    Use JSX with array props [OK]
Hint: Pass props as JSX arrays, not strings [OK]
Common Mistakes:
  • Passing component as string instead of JSX
  • Using wrong mount function signature
  • Passing props as comma-separated 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