create-acceptance-test
Installation
SKILL.md
Create Acceptance Test
Generate a ticket-driven acceptance test that validates specific acceptance criteria.
Workflow
- Parse the ticket key and description from the user's request (e.g.,
PROJ-456 bulk export) - Check if a POM exists for the page under test in
e2e/poms/- If yes, read it and add any new methods needed for this ticket's acceptance criteria
- If no, create one first using the
create-pomskill
- Check if test data exists — create or update as needed
- Create the spec file in
e2e/tests/acceptance/ - Run the test to verify it passes:
npx playwright test --project="chromium:acceptance" {TICKET}-{description}.spec.ts
Naming Convention
Filename
{TICKET}-{short-description}.spec.ts
{TICKET}— The ticket key exactly as it appears in the tracker (e.g.,PROJ-456,MANT-123){short-description}— Brief kebab-case summary (NOT the full ticket title)
Examples:
PROJ-456-bulk-export.spec.tsMANT-123-vault-bulk-delete.spec.tsFEAT-789-user-avatar-upload.spec.ts
test.describe Block
The outer test.describe must include the ticket key for traceability:
test.describe('PROJ-456: Bulk Export', () => {
Spec Structure
import { test } from '../../fixtures/base';
import { FeaturePage } from '../../poms/feature.page';
test.describe('PROJ-456: Bulk Export', () => {
test.beforeAll(async ({ browser }) => {
const context = await browser.newContext({
storageState: 'e2e/.auth/user.json',
});
const page = await context.newPage();
const pom = new FeaturePage(page);
await pom.setUp();
await page.close();
await context.close();
});
test('should export selected items as CSV', async ({ page, testData }) => {
const pom = new FeaturePage(page);
const items = testData.feature.items;
await pom.navigateToPage();
// ... validate acceptance criteria from ticket
});
test('should show error when no items selected', async ({ page }) => {
const pom = new FeaturePage(page);
await pom.navigateToPage();
// ... validate error handling criteria
});
});
See references/acceptance-spec-template.md for the full template.
POM Rules
Acceptance tests follow all the same POM rules as regression/smoke tests:
- Use the existing POM for the page under test
- If the ticket requires new interactions, add methods to the existing POM — do NOT create a second POM for the same page
- Only create a new POM if the ticket introduces an entirely new page
- All new POM methods must have full JSDoc with Steps and @param tags
All Standard Rules Apply
- Import
testfrom custom fixtures, not from@playwright/test - No raw
pagecalls in specs — all interaction through POMs - Every test is independent — creates its own data, navigates independently
- No hardcoded test data — use external JSON via the testData fixture
- beforeAll uses manual browser context with storageState for cleanup
Promotion Lifecycle
Acceptance tests are temporary by design. After the ticket is Done:
| Action | When |
|---|---|
| Promote to regression | Feature is permanent, should run on every build |
| Promote to smoke | Feature is on the critical path |
| Delete | Already covered by existing tests, or feature was reverted |
Use the promote-acceptance-test skill when ready to promote.
Staleness Policy
- Review
tests/acceptance/after every sprint/release - Any spec whose ticket is Done/Closed should be promoted or deleted
- Never leave acceptance tests running indefinitely
File Checklist
-
e2e/poms/{feature}.page.ts— POM updated with new methods (or new POM created) -
e2e/test-data/{feature}.json— Test data (created or updated) -
e2e/tests/acceptance/{TICKET}-{description}.spec.ts— Spec file - Filename includes ticket key prefix
-
test.describeincludes ticket key - All POM methods have JSDoc
- Tests pass:
npx playwright test --project="chromium:acceptance" {TICKET}-{description}.spec.ts
Related skills