
Testing Blocks
Validate Adobe AEM/EDS blocks in a real browser before you open a PR, covering layout, a11y, and Core Web Vitals.
Overview
Testing Blocks is an agent skill most often used in Ship (also Build) that defines browser-first validation for AEM/EDS blocks before pull requests.
Install
npx skills add https://github.com/adobe/skills --skill testing-blocksWhat is this skill?
- Requires browser tests for every block create or modify before opening a PR
- Covers responsive layout, DOM transformation, clicks, keyboard nav, and ARIA/screen-reader behavior
- Validates block-to-page integration and catches issues unit tests miss
- Includes performance checks such as LCP, CLS, and visual regressions
- Allows temporary unit tests where long-term maintenance cost exceeds value
- Browser tests are required before opening any PR for created or modified blocks
Adoption & trust: 593 installs on skills.sh; 122 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You changed a content block but only relied on fast unit tests or manual spot checks, so layout, a11y, and performance regressions slip into PRs.
Who is it for?
Developers creating or modifying AEM/EDS blocks who need a clear pre-PR browser testing checklist.
Skip if: Teams that only want long-lived unit-test suites with no browser gate, or projects outside block-based AEM/EDS frontends.
When should I use this skill?
You create or modify AEM/EDS blocks and need mandatory browser validation before a pull request.
What do I get? / Deliverables
You run structured browser tests on every touched block and only open a PR after layout, interaction, accessibility, and Core Web Vitals risks are checked in a real browser.
- Completed browser test pass for touched blocks
- Documented responsive, a11y, and performance checks
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Browser tests are explicitly required before any PR, so the canonical shelf is Ship even though you run them while building blocks. The skill defines a browser-first testing philosophy for block behavior, DOM, responsiveness, and performance—not unit-test maintenance.
Where it fits
After implementing a new hero block, run breakpoint and DOM checks in the browser before requesting review.
Gate the PR with browser tests for keyboard navigation and ARIA on a modified accordion block.
Capture LCP and CLS on a block-heavy landing template prior to release.
How it compares
Use as a PR gate philosophy for UI blocks, not as a substitute for automated CI unit coverage you plan to maintain forever.
Common Questions / FAQ
Who is testing-blocks for?
Frontend and full-stack builders working on Adobe AEM/EDS block libraries who want agents to enforce consistent browser validation before merge.
When should I use testing-blocks?
During Build while authoring blocks, and again in Ship before every PR—especially after responsive, interactive, a11y, or performance-sensitive changes.
Is testing-blocks safe to install?
It is documentation-style procedural guidance without declared tool permissions; review the Security Audits panel on this Prism page before adding the repo skill to your agent.
SKILL.md
READMESKILL.md - Testing Blocks
{"extends": "../../../../../release.config.cjs"} # [2.0.0](https://github.com/adobe/skills/compare/testing-blocks-v1.0.0...testing-blocks-v2.0.0) (2026-05-14) ### Bug Fixes * **aem-eds:** align references/ with spec and silence orphan warnings ([b48cf80](https://github.com/adobe/skills/commit/b48cf802a0974eccfa74fa85898113d66f29f64d)) # 1.0.0 (2026-04-16) { "name": "testing-blocks", "version": "0.0.0-semantically-released", "private": true } # Testing Philosophy **Core Principles:** - Create and maintain tests when the value they bring that exceeds the cost of creation and maintenance. Other things should and must be tested, but these tests can be temporary and not maintained long term - Browser Tests, even when not maintained long term, are critical to ensuring functionality works before opening a PR ## Browser Tests Most of your testing effort should focus on browser testing. This is where you validate that blocks actually work as intended in a real browser environment. ✅ **Always run browser tests for:** - Every block you create or modify - Visual layout and responsive behavior across breakpoints - DOM structure and content transformation - Interactive features (clicks, hovers, keyboard navigation) - Accessibility (ARIA labels, focus management, screen reader compatibility) - Integration between blocks and the page - Performance (LCP, CLS, visual regressions) Browser tests are **required before opening any PR**. They catch issues that unit tests cannot: rendering bugs, CSS conflicts, responsive breakdowns, accessibility failures, and real user interaction problems. **Important:** Browser tests are considered **temporary** and should **not be committed** to source control. They serve their purpose during development and PR validation, but don't need long-term maintenance. Once your PR is merged and the code is in production, these tests have done their job. ## Unit Tests ✅ **Write unit tests for:** - Logic-heavy utility functions used across multiple blocks - Data processing and transformation logic - API integrations and external service interactions - Complex algorithms or business logic - Shared libraries and helper functions These tests provide lasting value because they catch regressions in reused code, serve as living documentation, and are fast and easy to maintain. ❌ **Don't write unit tests for:** - Specifc DOM structures or UI Layouts - Visual appearance validation - Block-specific decoration logic or rendering behavior These tests are still critical and must be tested, but we do that with browser testing. We don't want to commit these tests to git or maintain them long term. # Testing Troubleshooting Guide Common issues encountered during testing and how to resolve them. ## Tests Fail After Changes ### Unit Tests Fail **Symptoms:** - Test suite runs but some tests fail - Error messages about unexpected values or behaviors **Diagnosis:** 1. **Read the error message carefully** - What assertion failed? - What was expected vs actual? - Which test file and line number? 2. **Determine the cause:** - Did you break existing functionality? - Did requirements change? - Is the test incorrect? **Solutions:** **If you broke functionality:** ```bash # Fix the code, not the test # Re-run tests npm test ``` **If requirements changed:** ```bash # Update the test to match new requirements # Ensure the change is intentional npm test ``` **If testing a specific file:** ```bash # Run just one test file for faster feedback npm test -- test/utils/my-utility.test.js ``` **If debugging a specific test:** ```bash # Use test.only to run just one test it.only('should do something', () => { // This test will be the only one that runs }); ``` ### Browser Tests Fail **Symptoms:** - Browser test script throws errors - Screenshots not generated - Timeouts occur **Common Issues and Solutions:** **Issue: Dev server not running** ```bash # Start the dev server aem up # Verify it's a