Step 8: E2E tests - requires GATE 7 passed - FINAL VALIDATION
Runs end-to-end tests to validate complete user journeys across the full stack. Use this after UI tests pass to verify database state, API responses, and frontend behavior together.
/plugin marketplace add packlikez/claude-code-dev-plugin/plugin install dev@packlikez-dev-plugins<feature-name>□ GATE 7 PASSED (UI tests complete)
□ All UI tests passing
□ Backend running
□ Database accessible
cat specs/{type}/{feature-name}.md # Spec (source of truth)
cat api-contracts/{feature}.yaml # API contract
cat tests/unit/services/{feature}*.test.ts # Backend unit tests
cat tests/integration/{feature}*.test.ts # API tests
cat tests/unit/components/{feature}/*.tsx # Frontend unit tests
cat tests/ui/{feature}/*.spec.ts # UI tests
cat skills/test-patterns-ui.md # UI/E2E test patterns
cat skills/ux-patterns.md # UX patterns (a11y, responsive, forms)
cat skills/gate-8-e2e.md # Gate 8 criteria
| Criterion | Test File | Status |
|---|---|---|
| AC1: GIVEN... WHEN... THEN... | e2e/happy-path.spec.ts | □ |
| AC2: GIVEN... WHEN... THEN... | e2e/error-handling.spec.ts | □ |
Use Task tool with test-writer agent:
Write E2E tests for {feature-name}:
- Complete user journeys (full stack)
- Use data-testid for element selection
- Every acceptance criterion from spec
- Every edge case from spec
- Database state verification after actions
- Follow test-patterns-ui skill
- Follow ux-patterns skill (accessibility, responsive, forms)
Element Selection:
Full Stack Verification:
Edge Cases:
Stability:
// After each mutation, verify DB state
const res = await request.post('/api/users').send(data);
const dbUser = await db.users.findById(res.body.id);
expect(dbUser.email).toBe(data.email);
Use Task tool with gate-keeper agent:
Validate GATE 8 for {feature-name}
See gate-8-e2e skill for all 18 criteria.
When GATE 8 passes:
## {feature-name}
- [x] Step 1-8: All GATES PASSED ✓
STATUS: ✅ COMPLETE
Feature ready for: code review → merge → deploy
tests/e2e/{feature}/