</>

Technology

Cypress

Difficulty

Beginner

Interview Question

What are Cypress fixtures? How do you use test data in Cypress?

Answer

Cypress Fixtures

Fixtures are static test data files (JSON, CSV, images) stored in cypress/fixtures/. They decouple test data from test logic.

Fixture File Structure

CODE
cypress/
├── fixtures/
│   ├── users.json          ← test user data
│   ├── products.json       ← product test data
│   ├── login-valid.json    ← valid login creds
│   └── login-invalid.json  ← invalid login creds
├── e2e/
│   └── login.cy.js

Creating a Fixture File

JSON
// cypress/fixtures/users.json
{
  "validUser": {
    "email": "test@automateqa.com",
    "password": "Test@123",
    "name": "QA Tester"
  },
  "adminUser": {
    "email": "admin@automateqa.com",
    "password": "Admin@123",
    "role": "admin"
  },
  "invalidUser": {
    "email": "wrong@email.com",
    "password": "wrongpass"
  }
}

Using cy.fixture() — Method 1: Then Callback

JavaScript
describe('Login Tests', () => {
  it('should login with valid user', () => {
    cy.fixture('users').then((users) => {
      cy.visit('/login');
      cy.get('#email').type(users.validUser.email);
      cy.get('#password').type(users.validUser.password);
      cy.get('[data-testid="login-btn"]').click();
      cy.get('.user-greeting').should('contain', users.validUser.name);
    });
  });
});

Using cy.fixture() — Method 2: this Alias (Cleaner)

JavaScript
describe('Login Tests', () => {
  beforeEach(function() {
    // Load fixture into this.users — available in all tests
    cy.fixture('users').as('users');
  });

  it('should login with valid credentials', function() {
    const { email, password } = this.users.validUser;
    cy.visit('/login');
    cy.get('#email').type(email);
    cy.get('#password').type(password);
    cy.get('[data-testid="login-btn"]').click();
    cy.url().should('include', '/dashboard');
  });

  it('should reject invalid credentials', function() {
    const { email, password } = this.users.invalidUser;
    cy.visit('/login');
    cy.get('#email').type(email);
    cy.get('#password').type(password);
    cy.get('[data-testid="login-btn"]').click();
    cy.get('.error').should('be.visible');
  });
});

Data-Driven Testing with Fixtures

JavaScript
// cypress/fixtures/search-terms.json
// ["Selenium", "Cypress", "Playwright", "TestNG"]

describe('Search Tests', () => {
  it('should search for multiple terms', () => {
    cy.fixture('search-terms').then((terms) => {
      terms.forEach((term) => {
        cy.visit('/');
        cy.get('[data-testid="search"]').clear().type(term);
        cy.get('[data-testid="search-btn"]').click();
        cy.get('[data-testid="result-count"]')
          .should('be.visible')
          .and('not.contain', '0 results');
      });
    });
  });
});

Intercepting API with Fixture Response (Mocking)

JavaScript
// cypress/fixtures/api-users.json
// [{"id":1,"name":"Alice","role":"QA"},{"id":2,"name":"Bob","role":"Dev"}]

it('should display users from API', () => {
  cy.intercept('GET', '/api/users', { fixture: 'api-users' }).as('getUsers');
  cy.visit('/users');
  cy.wait('@getUsers');
  cy.get('[data-testid="user-row"]').should('have.length', 2);
  cy.contains('Alice').should('be.visible');
});

Follow AutomateQA

Related Topics