← Back to Skills Marketplace
ivangdavila

Cypress

by Iván · GitHub ↗ · v1.0.0
linuxdarwinwin32 ✓ Security Clean
643
Downloads
0
Stars
5
Active Installs
1
Versions
Install in OpenClaw
/install cypress
Description
Write reliable E2E and component tests with Cypress avoiding flaky selectors, race conditions, and CI failures.
README (SKILL.md)

Setup

On first use, read setup.md for integration guidelines.

When to Use

User needs E2E tests, component tests, or API tests with Cypress. Agent writes tests, debugs flaky specs, configures CI/CD, and creates custom commands.

Architecture

Project tests live in the standard Cypress structure:

cypress/
├── e2e/              # E2E test specs
├── component/        # Component tests (if enabled)
├── fixtures/         # Test data JSON files
├── support/
│   ├── commands.ts   # Custom commands
│   ├── e2e.ts        # E2E support file
│   └── component.ts  # Component support file
└── downloads/        # Downloaded files during tests
cypress.config.ts     # Main configuration

Quick Reference

Topic File
Setup process setup.md
Memory template memory-template.md
Selectors & queries selectors.md
Custom commands commands.md
Network & API network.md
CI/CD configuration ci.md

Core Rules

1. Selectors: data-testid First

// ✅ Resilient — survives refactors
cy.get('[data-testid="submit-btn"]')
cy.get('[data-cy="user-list"]')

// ❌ Fragile — breaks on style/structure changes
cy.get('.btn-primary.submit')
cy.get('#root > div > form > button:nth-child(3)')
cy.get('button').contains('Submit')  // OK for text, not structure

Priority order: data-testid > data-cy > aria-* > text content > CSS selectors.

2. Never Use Fixed Waits

// ❌ Flaky and slow
cy.wait(3000)
cy.get('.loader').should('exist')
cy.wait(2000)

// ✅ Wait for actual state
cy.get('.loader').should('not.exist')
cy.get('[data-testid="results"]').should('be.visible')
cy.intercept('GET', '/api/users').as('getUsers')
cy.wait('@getUsers')

3. Intercept Network Requests

// Setup intercepts BEFORE triggering actions
cy.intercept('POST', '/api/login', { statusCode: 200, body: { token: 'abc' } }).as('login')
cy.get('[data-testid="login-btn"]').click()
cy.wait('@login')

4. One Assertion Focus per Test

// ✅ Clear failure message
it('shows error on invalid email', () => {
  cy.get('[data-testid="email"]').type('invalid')
  cy.get('[data-testid="submit"]').click()
  cy.get('[data-testid="email-error"]').should('contain', 'Valid email required')
})

// ❌ Multiple concerns — unclear which failed
it('validates the entire form', () => {
  // Tests 5 different validation rules
})

5. Commands for Repeated Actions

// cypress/support/commands.ts
Cypress.Commands.add('login', (email: string, password: string) => {
  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')
  })
})

// Usage
cy.login('[email protected]', 'password123')

6. Fixtures for Test Data

// cypress/fixtures/user.json
{
  "validUser": { "email": "[email protected]", "password": "Test123!" },
  "adminUser": { "email": "[email protected]", "password": "Admin123!" }
}
cy.fixture('user').then((users) => {
  cy.login(users.validUser.email, users.validUser.password)
})

7. Isolation: Reset State Before Tests

beforeEach(() => {
  cy.intercept('GET', '/api/notifications', { body: [] })
  cy.clearCookies()
  cy.clearLocalStorage()
  // Or: cy.task('db:seed') if using database reset
})

Common Traps

Trap Consequence Fix
cy.wait(ms) fixed delays Flaky tests, slow CI Use cy.intercept().as() + cy.wait('@alias')
CSS selectors for actions Break on redesign Use data-testid attributes
Test interdependence One failure cascades Each test must setup its own state
Asserting too early False positives Chain .should() to auto-retry
Forgetting baseUrl Hardcoded URLs everywhere Set baseUrl in config
Skipping viewport tests Mobile bugs in prod Add cy.viewport() tests
Ignoring retry-ability Flaky assertions Use Cypress queries, not jQuery

Debugging

Time Travel

Click any command in the Command Log to see DOM snapshot at that moment.

Pause and Step

cy.get('[data-testid="item"]').then(($el) => {
  debugger  // Opens DevTools
})
// Or
cy.pause()  // Pause execution, step manually

Console Debugging

cy.get('[data-testid="items"]')
  .should('have.length.gt', 0)
  .then(($items) => {
    console.log('Found items:', $items.length)
  })

Configuration

cypress.config.ts Essentials

import { defineConfig } from 'cypress'

export default defineConfig({
  e2e: {
    baseUrl: 'http://localhost:3000',
    viewportWidth: 1280,
    viewportHeight: 720,
    defaultCommandTimeout: 10000,
    requestTimeout: 10000,
    retries: { runMode: 2, openMode: 0 },
    video: false,  // Enable for CI debugging
    screenshotOnRunFailure: true,
    setupNodeEvents(on, config) {
      // Plugins here
    },
  },
  component: {
    devServer: {
      framework: 'react',  // or 'vue', 'angular', etc.
      bundler: 'vite',     // or 'webpack'
    },
  },
})

TypeScript Support

// cypress/support/commands.ts
declare global {
  namespace Cypress {
    interface Chainable {
      login(email: string, password: string): Chainable\x3Cvoid>
      getByTestId(testId: string): Chainable\x3CJQuery\x3CHTMLElement>>
    }
  }
}

Cypress.Commands.add('getByTestId', (testId: string) => {
  return cy.get(`[data-testid="${testId}"]`)
})

Running Tests

Command Purpose
npx cypress open Interactive mode
npx cypress run Headless (CI)
npx cypress run --spec "cypress/e2e/login.cy.ts" Single spec
npx cypress run --headed Headless but visible
npx cypress run --browser chrome Specific browser

External Endpoints

This skill does not call external APIs. Cypress runs entirely locally or in your own CI environment.

Security & Privacy

Data that stays local:

  • All test code and fixtures remain in project directory
  • Cypress runs locally or in your own CI environment

This skill does NOT:

  • Send data to external services
  • Require API keys or authentication
  • Access files outside project directory

Note: Cypress Cloud (optional, paid) can receive test results if configured with CYPRESS_RECORD_KEY. This skill does not configure or recommend it.

Related Skills

Install with clawhub install \x3Cslug> if user confirms:

  • playwright — alternative E2E framework
  • typescript — TypeScript best practices
  • javascript — JS fundamentals and patterns
  • react — React component testing

Feedback

  • If useful: clawhub star cypress
  • Stay updated: clawhub sync
Usage Guidance
This skill is a documentation/guide for Cypress and appears coherent and appropriate. Before installing/using it: 1) ensure 'npx' and your node toolchain are available; 2) review any CI templates (they reference CYPRESS_RECORD_KEY, GITHUB_TOKEN) and only add secrets via your CI provider's secret store; 3) inspect generated tests/fixtures to ensure they don't embed real credentials or production data; 4) when following instructions that seed/reset databases (cy.task('db:seed')), confirm the agent has permission to run those commands in your environment. If you want tighter assurance, run the steps in a sandboxed repo or CI environment first.
Capability Analysis
Type: OpenClaw Skill Name: cypress Version: 1.0.0 The OpenClaw AgentSkills skill bundle for Cypress is benign. All files, including `SKILL.md` and `setup.md`, provide comprehensive instructions and code examples for setting up, configuring, and using Cypress for testing. The commands intended for the agent (e.g., `npm install -D cypress`, `npx cypress open`) are standard for Cypress installation and execution, aligning perfectly with the skill's stated purpose. The skill explicitly states it does not send data to external services, and while it mentions `CYPRESS_RECORD_KEY` for optional Cypress Cloud integration, it clarifies that the skill itself does not configure or recommend its use, demonstrating transparency rather than malicious intent. There is no evidence of data exfiltration, malicious execution, persistence mechanisms, or prompt injection designed to subvert the agent for harmful purposes.
Capability Assessment
Purpose & Capability
Name/description (Cypress E2E/component testing) align with what the skill asks for: only 'npx' as a required binary and a set of guidance files describing test structure, commands, CI templates, and setup. Nothing requested is unrelated to running or authoring Cypress tests.
Instruction Scope
SKILL.md and the included documents direct the agent to read project files, create Cypress config/support/fixtures/tests, run common local/CI commands (npm ci, npx cypress run, etc.), and modify repository files — all within the normal scope of setting up/running tests. The instructions do reference reading package.json and filesystem paths inside the project (expected for this task).
Install Mechanism
There is no install spec and no code files to write or download; the skill is instruction-only. It relies on existing developer tooling (npx/npm) which is proportionate for Cypress work.
Credentials
The registry metadata declares no required env vars or credentials (appropriate). The docs do show common optional CI envs such as CYPRESS_RECORD_KEY, GITHUB_TOKEN, and examples that read Cypress.env('API_TOKEN') or use localStorage tokens — these are standard for CI/test runs but are not required by the skill. Users should avoid placing real production secrets in fixtures or test code and should manage CI secrets via the platform's secret store.
Persistence & Privilege
always is false and the skill does not request persistent system-wide privileges or modify other skills. It recommends creating project files under the repository (normal development behavior) and does not attempt to change agent/system configuration outside the project's scope.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install cypress
  3. After installation, invoke the skill by name or use /cypress
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial release
Metadata
Slug cypress
Version 1.0.0
License
All-time Installs 5
Active Installs 5
Total Versions 1
Frequently Asked Questions

What is Cypress?

Write reliable E2E and component tests with Cypress avoiding flaky selectors, race conditions, and CI failures. It is an AI Agent Skill for Claude Code / OpenClaw, with 643 downloads so far.

How do I install Cypress?

Run "/install cypress" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Cypress free?

Yes, Cypress is completely free (open-source). You can download, install and use it at no cost.

Which platforms does Cypress support?

Cypress is cross-platform and runs anywhere OpenClaw / Claude Code is available (linux, darwin, win32).

Who created Cypress?

It is built and maintained by Iván (@ivangdavila); the current version is v1.0.0.

💬 Comments