E2e
My personal SDLC toolbelt for AI coding agents — PRD to ship.
npx -y skills add helderberto/agent-skills --skill e2eAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Write end-to-end tests for user flows using Cypress. Use when user asks to "write e2e tests", "/e2e", "add Cypress tests", or wants to test a user flow end-to-end. Don't use for unit tests, component tests, or projects using Playwright, Puppeteer, or other non-Cypress frameworks.
SKILL.md
2.3 KB, as published. Nobody here has run it
End-to-End Tests (Cypress)
Detection
Run in parallel:
- Check
package.jsonforcypressversion - Read
cypress.config.tsfor baseUrl and test file patterns - Read 1-2 existing test files in
cypress/e2e/to match conventions
Workflow
- Read existing tests and config to match project style
- Understand the user flow — ask if unclear
- Identify selectors (see selectors.md)
- Write tests in
cypress/e2e/— one file per flow or feature
Format
describe('login flow', () => {
beforeEach(() => {
cy.visit('/login')
})
it('logs in with valid credentials', () => {
cy.findByLabelText('Email').type('[email protected]')
cy.findByLabelText('Password').type('password')
cy.findByRole('button', { name: 'Sign in' }).click()
cy.url().should('include', '/dashboard')
cy.findByRole('heading', { name: 'Dashboard' }).should('be.visible')
})
it('shows error with invalid credentials', () => {
cy.findByLabelText('Email').type('[email protected]')
cy.findByLabelText('Password').type('wrong')
cy.findByRole('button', { name: 'Sign in' }).click()
cy.findByRole('alert').should('contain.text', 'Invalid credentials')
})
})
Selector priority
Prefer @testing-library/cypress commands when installed, e.g. cy.findByRole('button', { name: 'Submit' }); use cy.get('[data-testid="submit"]') only as a last resort.
See selectors.md for the full priority guide.
Rules
- Use
@testing-library/cypressselectors when available, elsecy.get - Use
data-testidonly as last resort - One logical outcome per
itblock - Test behavior, not implementation details
- Never use
cy.wait(<number>)— usecy.findBy*auto-retry instead
Error Handling
- If
cypressis not inpackage.json→ stop and ask user to install Cypress first - If
cypress.config.tsis missing → ask user to runnpx cypress opento initialize config - If
baseUrlis unreachable → verify the dev server is running before writing tests that require it