Cypress Testing in Angular

Learn Cypress testing in Angular with installation, configuration, E2E testing, Component Testing, API interception, fixtures, custom commands, CI/CD integration, enterprise best practices, and interview questions.

Cypress is one of the most popular JavaScript testing frameworks for End-to-End (E2E) and Component Testing.

Unlike Selenium, Cypress runs directly inside the browser, giving developers:

  • Faster execution
  • Automatic waiting
  • Excellent debugging
  • Time travel debugging
  • Built-in screenshots
  • Video recording
  • API mocking
  • Network interception

Cypress is widely used for testing modern Angular applications.


Table of Contents

  1. What is Cypress?
  2. Why Use Cypress?
  3. Cypress Architecture
  4. Installing Cypress
  5. Cypress Project Structure
  6. Writing Your First Test
  7. Cypress Commands
  8. Element Selection
  9. API Interception
  10. Fixtures
  11. Custom Commands
  12. Component Testing
  13. CI/CD Integration
  14. Enterprise Banking Example
  15. Best Practices
  16. Common Mistakes
  17. Top 10 Interview Questions
  18. Interview Cheat Sheet
  19. Summary

What is Cypress?

Cypress is a modern testing framework designed for:

  • End-to-End Testing
  • Component Testing
  • API Testing
  • UI Automation

It executes tests inside a real browser while providing a rich developer experience.


Why Use Cypress?

Benefits include:

  • Easy setup
  • Fast execution
  • Automatic waiting
  • Built-in assertions
  • Screenshots
  • Videos
  • API interception
  • Excellent debugging
  • Great developer experience

Cypress Architecture

flowchart LR

Developer

Developer --> Cypress

Cypress --> Browser

Browser --> AngularApplication

AngularApplication --> BackendAPI

Cypress vs Selenium

Feature Cypress Selenium
Installation Easy Moderate
Speed Fast Moderate
Automatic Waiting
Time Travel Debugging
API Mocking Limited
Screenshots Plugin
Video Recording Plugin
JavaScript Support Excellent Good

Installing Cypress

Install Cypress

npm install -D cypress

Open Cypress

npx cypress open

Run headless

npx cypress run

Cypress Folder Structure

cypress/

├── e2e/

├── fixtures/

├── support/

├── downloads/

├── screenshots/

└── videos/

First Cypress Test

describe('Login Page', () => {

  it('should login successfully', () => {

    cy.visit('/login');

    cy.get('#username')

      .type('admin');

    cy.get('#password')

      .type('password');

    cy.get('button')

      .click();

    cy.url()

      .should(

        'include',

        '/dashboard'

      );

  });

});

Cypress Execution Flow

flowchart LR

Test

Test --> Browser

Browser --> AngularApp

AngularApp --> Response

Response --> Assertions

Common Cypress Commands

Command Purpose
cy.visit() Open page
cy.get() Find element
cy.contains() Find text
cy.click() Click element
cy.type() Enter text
cy.url() Verify URL
cy.wait() Wait for request
cy.intercept() Mock API
cy.fixture() Load test data

Selecting Elements

Preferred approach

<button

data-testid="login-button">

Login

</button>

Test

cy.get(

'[data-testid="login-button"]'

).click();

Using dedicated test attributes makes tests less fragile.


Assertions

Examples

cy.get('h1')

.should(

'contain',

'Dashboard'

);

Verify visibility

cy.get('#submit')

.should(

'be.visible'

);

Verify value

cy.get('#email')

.should(

'have.value',

'[email protected]'

);

API Interception

Intercept requests

cy.intercept(

'GET',

'/api/customers',

[]

).as(

'customers'

);

Wait

cy.wait(

'@customers'

);

Benefits

  • Faster tests
  • Stable execution
  • No backend dependency

API Interception Flow

flowchart LR

AngularApp

AngularApp --> Cypress

Cypress --> MockAPI

MockAPI --> Response

Fixtures

Fixture

[
  {
    "id": 1,
    "name": "John"
  },
  {
    "id": 2,
    "name": "Jane"
  }
]

Load fixture

cy.fixture(

'customers'

).then(data => {

  cy.intercept(

    'GET',

    '/api/customers',

    data

  );

});

Fixtures provide reusable test data.


Custom Commands

Support file

Cypress.Commands.add(

'login',

(

username,

password

) => {

  cy.visit('/login');

  cy.get('#username')

    .type(username);

  cy.get('#password')

    .type(password);

  cy.get('button')

    .click();

});

Usage

cy.login(

'admin',

'password'

);

Component Testing

Cypress also supports Angular Component Testing.

Example

cy.mount(

CustomerComponent

);

Verify

cy.contains(

'Customers'

);

Component Testing provides fast feedback without running the entire application.


Screenshots

Capture screenshot

cy.screenshot();

Useful when:

  • Tests fail
  • UI verification
  • Regression analysis

Video Recording

Headless execution can record videos automatically.

Benefits

  • Debug failures
  • Review user flows
  • CI/CD artifacts

Enterprise Banking Example

Critical Workflows

  • Login
  • Account Summary
  • Fund Transfer
  • Bill Payment
  • Loan Application
  • Logout

Testing Strategy

Workflow Cypress Test
Login Authentication
Dashboard UI Rendering
Transfers Business Flow
Payments Form Validation
Statements Download
Logout Session Validation

Enterprise Testing Architecture

flowchart TD

Developer

Developer --> Git

Git --> CI

CI --> Cypress

Cypress --> Browser

Browser --> BankingApplication

BankingApplication --> Reports

CI/CD Integration

Typical Pipeline

Build

↓

Unit Tests

↓

Integration Tests

↓

Cypress Tests

↓

Deployment

Run headless

npx cypress run

Common CI platforms

  • GitHub Actions
  • GitLab CI
  • Jenkins
  • Azure DevOps

Performance Best Practices

Practice Benefit
Use data-testid Stable selectors
Intercept APIs Faster execution
Reuse Custom Commands Cleaner tests
Keep Tests Independent Reliable execution
Store Test Data in Fixtures Reusable
Capture Screenshots Easier debugging
Run Headless in CI Faster builds
Parallel Execution Reduced runtime

Common Mistakes

Using CSS-Based Selectors

Avoid

cy.get(

'.btn-primary'

);

Prefer

cy.get(

'[data-testid="save-button"]'

);

Hardcoded Waits

Avoid

cy.wait(5000);

Prefer waiting for:

  • Network requests
  • Visible elements
  • Expected application state

Sharing Test Data

Each test should create or reset its own data when needed.


Testing Too Many Scenarios

Keep each test focused on a single business workflow.


Ignoring API Mocking

Mock unstable external services when appropriate to reduce flaky tests and improve execution speed.


Cypress Best Practices

Practice Recommendation
Stable Selectors Yes
API Interception Yes
Fixtures Yes
Custom Commands Yes
Independent Tests Yes
Component Testing Yes
Headless CI Yes
Parallel Execution Yes

Cypress vs Playwright

Feature Cypress Playwright
Learning Curve Easy Moderate
Automatic Waiting Excellent Excellent
Multi-Browser Support Good Excellent
API Mocking Excellent Excellent
Component Testing Supported
Parallel Testing Yes Yes
Mobile Emulation Good Excellent
CI/CD Support Excellent Excellent

Advantages

Benefit Description
Fast Execution Runs efficiently
Automatic Waiting Fewer flaky tests
API Mocking Stable automation
Rich Debugging Easier troubleshooting
Component Testing Faster feedback
Enterprise Ready CI/CD integration

Top 10 Cypress Interview Questions

1. What is Cypress?

Answer

Cypress is a JavaScript testing framework used for End-to-End, Component, and UI testing of modern web applications.


Answer

Cypress provides automatic waiting, excellent debugging, built-in screenshots, video recording, API interception, and a simple developer experience.


3. What is cy.visit()?

Answer

cy.visit() opens a page in the browser for testing.


4. What is cy.intercept()?

Answer

cy.intercept() intercepts network requests, allowing developers to mock or observe HTTP traffic during tests.


5. What are Fixtures?

Answer

Fixtures are reusable files that store test data such as JSON objects, making tests cleaner and easier to maintain.


6. What are Custom Commands?

Answer

Custom Commands encapsulate reusable Cypress actions, reducing duplication and improving readability.


7. Why use data-testid selectors?

Answer

They provide stable, implementation-independent selectors that are less likely to break when the UI changes.


8. Can Cypress perform Component Testing?

Answer

Yes. Cypress supports Angular Component Testing, allowing components to be mounted and tested in isolation.


9. How does Cypress differ from Selenium?

Answer

Cypress offers automatic waiting, built-in debugging tools, API interception, and a simpler setup, whereas Selenium focuses on broad browser automation across multiple languages.


10. What are Cypress best practices?

Answer

  • Use data-testid selectors
  • Keep tests independent
  • Intercept APIs where appropriate
  • Reuse custom commands
  • Store data in fixtures
  • Avoid arbitrary waits
  • Run tests automatically in CI/CD

Interview Cheat Sheet

Requirement Cypress Feature
Visit Page cy.visit()
Find Element cy.get()
Assertions should()
API Mocking cy.intercept()
Test Data Fixtures
Reusable Logic Custom Commands
Component Testing cy.mount()
Screenshots cy.screenshot()
Headless Execution cypress run
Enterprise Testing CI/CD Integration

Summary

Cypress is one of the leading testing frameworks for Angular applications, offering fast execution, automatic waiting, API interception, Component Testing, and powerful debugging capabilities. Its developer-friendly API, rich tooling, and seamless CI/CD integration make it an excellent choice for validating critical user journeys and ensuring application quality. By following best practices such as using stable selectors, reusable commands, fixtures, and independent tests, teams can build reliable and maintainable test suites.


Key Takeaways

  • ✅ Cypress supports both E2E and Component Testing.
  • ✅ It runs directly in the browser with automatic waiting.
  • cy.intercept() enables API mocking and request inspection.
  • ✅ Fixtures simplify reusable test data management.
  • ✅ Custom Commands reduce duplicate code.
  • ✅ Prefer data-testid selectors for stability.
  • ✅ Avoid arbitrary waits and rely on built-in synchronization.
  • ✅ Capture screenshots and videos for debugging.
  • ✅ Integrate Cypress into CI/CD pipelines.
  • ✅ Cypress is one of the most frequently discussed Angular testing tools in interviews.

Next Article

➡️ 118-Playwright-QA.md