</>

Technology

Cypress

Difficulty

Advanced

Interview Question

What is the Cypress component testing? How is it different from E2E testing?

Answer

Cypress Component Testing vs E2E Testing

Key Difference

E2E TestingComponent Testing
What it testsFull user flows in real browserIndividual UI components in isolation
RequiresRunning server + URLNo server needed
SpeedSlower (full app)Fast (one component)
Use caseLogin flow, checkout, navigationButton, form, modal, card
cy.visit()YesNo — use cy.mount()

E2E Test (Full App)

JavaScript
// cypress/e2e/login.cy.js
it('should login and reach dashboard', () => {
  cy.visit('/login')                           // real server
  cy.get('#email').type('user@test.com')
  cy.get('#password').type('pass123')
  cy.get('[data-testid="login-btn"]').click()
  cy.url().should('include', '/dashboard')     // real navigation
})

Component Test (Isolated Component)

JavaScript
// cypress/component/LoginForm.cy.jsx
import LoginForm from '../../src/components/LoginForm'

describe('LoginForm Component', () => {
  it('should render and submit form', () => {
    const onSubmit = cy.stub().as('submitFn')

    // Mount the component directly — no server
    cy.mount(<LoginForm onSubmit={onSubmit} />)

    cy.get('[data-testid="email"]').type('user@test.com')
    cy.get('[data-testid="password"]').type('pass123')
    cy.get('[data-testid="login-btn"]').click()

    // Verify stub was called
    cy.get('@submitFn').should('have.been.calledWith', {
      email:    'user@test.com',
      password: 'pass123',
    })
  })

  it('should disable button when fields empty', () => {
    cy.mount(<LoginForm onSubmit={cy.stub()} />)
    cy.get('[data-testid="login-btn"]').should('be.disabled')
  })
})

Setup for Component Testing

JavaScript
// cypress.config.js
const { defineConfig } = require('cypress')
const { devServer } = require('@cypress/vite-dev-server') // or webpack

module.exports = defineConfig({
  component: {
    devServer: {
      framework: 'react',   // or 'vue', 'angular', 'svelte'
      bundler:   'vite',    // or 'webpack'
    },
    specPattern: 'cypress/component/**/*.cy.{js,jsx,ts,tsx}',
  },
})

When to Use Which

  • Component tests: Test a single component in isolation (button states, form validation, error messages)
  • E2E tests: Test full user workflows (registration flow, checkout, authentication)
  • Best practice: Use BOTH — component tests for component logic, E2E for critical user paths

Follow AutomateQA

Related Topics