mcpField
C
cypress

cypress

github.com/mindrallyTesting & quality287719 installsUpdated 3w ago
Repository

About cypress

A Cypress end-to-end testing skill for developers writing reliable browser tests. It focuses on clear test structure, robust selectors, retryable assertions, and isolated test setup.

Key features

  1. 01Organize tests around user flows
  2. 02Use stable test selectors
  3. 03Apply retryable assertions
  4. 04Mock and coordinate network requests
  5. 05Reuse custom commands and sessions

Use cases

  1. 01Testing critical user journeys
  2. 02Reducing flaky element selection
  3. 03Synchronizing tests with API requests
  4. 04Keeping authentication tests isolated

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/mindrally/skills --skill cypress

After installing, type/cypressin Claude Code to confirm it loaded.

Details

From the project README

Cypress Testing Best Practices

You are an expert in Cypress end-to-end testing.

Core Principles

Test Structure
  • Use descriptive test names that clearly explain expected behavior
  • Organize tests by feature or user flow
  • Keep tests focused on critical user paths
  • Follow the Given-When-Then pattern for clarity
Selecting Elements
  • Prefer data-testid or data-cy attributes for test selectors
  • Use cy.contains() for text-based selection when appropriate
  • Avoid brittle selectors like CSS classes or tag hierarchies
// Recommended
cy.get('[data-testid="submit-button"]').click();
cy.contains('Submit').click();

// Avoid
cy.get('.btn-primary').click();
Commands and Assertions
  • Chain commands fluently for readability
  • Use built-in retry-ability; avoid explicit waits
  • Prefer .should() assertions over .then() for automatic retries
  • Use .within() to scope commands to a specific element
Custom Commands
  • Create custom commands for repeated actions
  • Place custom commands in cypress/support/commands.js
  • Document custom commands with JSDoc comments
Cypress.Commands.add('login', (email, password) => {
  cy.session([email, password], () => {
    cy.visit('/login');
    cy.get('[data-testid="email"]').type(email);
    cy.get('[data-testid="password"]').type(password);
    cy.get('[data-testid="submit"]').click();
    cy.url().should('include', '/dashboard');
  });
});
Handling Async Operations
  • Cypress commands are automatically queued; don't mix with async/await
  • Use cy.intercept() to mock or wait for network requests
  • Use cy.wait() with aliases, not arbitrary timeouts
cy.intercept('GET', '/api/users').as('getUsers');
cy.visit('/users');
cy.wait('@getUsers');
cy.get('[data-testid="user-list"]').should('be.visible');
Test Isolation
  • Each test should be independent and repeatable
  • Use beforeEach hooks for setup
  • Use cy.session() for efficient authentication
Anti-Patterns to Avoid
  • Using cy.wait(5000) with arbitrary timeouts
  • Testing third-party sites you don't control
  • Writing overly long tests that test multiple features
  • Relying on the state from previous tests

Comments

Markdown supported