You've worked through nine chapters. Selectors, navigation, network stubbing, custom commands, page objects, sessions, CI, framework architecture — every Cypress pattern that matters in real work. The capstone pulls every one of them into one project: a production-ready test suite for an e-commerce web application called ShopEasy. This first lesson is the brief — the application's surface area, the deliverables you'll produce, and the rubric that maps each deliverable back to the chapter where the skill was taught. The next lesson walks through the build step by step; the third reviews and points to stretch goals.
The application — ShopEasy
ShopEasy is the kind of web app every QA engineer's portfolio should have a test suite for: not too small to be unrealistic, not too large to fit in a weekend. Imagine — or build — a typical mid-sized e-commerce site with seven core areas:
- Product listing. A
/productspage with cards, search input, category filters, price-range filters, and sort-by-price/popularity controls. - Product detail.
/products/:idwith images, description, price, quantity selector, "Add to cart" button, related products. - Shopping cart.
/cartwith line items, quantity update, remove buttons, totals, checkout CTA. - Authentication.
/login,/register,/logout. Email + password. Session persists across page reloads. - Multi-step checkout.
/checkout/shipping→/checkout/payment→/checkout/review→/checkout/confirmation. Each step has its own form and validation. - Account.
/account/ordersshowing order history;/account/settingsfor profile updates. - Admin panel.
/admin/productswith create/edit/delete;/admin/orderswith status changes; admin-only access guarded by role.
If you don't have a real ShopEasy to test against, two equally valid options:
- Use Sauce Demo (
https://www.saucedemo.com) as the target. It covers most of the surface (products, cart, checkout) and has stabledata-testattributes throughout. - Build a minimal ShopEasy yourself. A Vite + React + Zustand setup with a stubbed JSON-server backend takes a few hours and gives you full control over the app actions, data-testids, and edge-case routes.
Either approach works. The point of the capstone is the test framework, not the app under test.
Deliverables — the eleven artefacts
Your final project should ship these eleven things, organised exactly the way chapter 9 lays out a production framework:
- A scaffolded Cypress project with TypeScript:
cypress.config.ts,cypress/tsconfig.json, multi-target environment config (chapters 1, 2, 5). - TypeScript type definitions for the core data models in
cypress/support/types.ts:User,Product,CartItem,Order,ApiResponse<T>(chapter 9, lesson 2). - Test data factories in
cypress/utils/factories.tswithcreateUser,createProduct,createOrder,createOrderWithProducts, using@faker-js/fakerfor realistic data and timestamp+counter for uniqueness (chapter 9, lesson 3). - Page objects in
cypress/pages/for at least four pages:LoginPage,ProductListPage,CartPage,CheckoutPage. Object-style or class-style — pick one and stay consistent (chapter 5, lesson 2). - Custom commands in
cypress/support/commands/split by feature:auth.ts,cart.ts,admin.ts, plusindex.tsre-exports. Typed viadeclare global { namespace Cypress { interface Chainable { ... } } }(chapter 5, lesson 1). - API helpers in
cypress/utils/api.tsfor backend setup:seedUserViaApi,seedProductsViaApi,clearTestData(chapter 4, lesson 4). - At least 25 test cases across these categories:
- Authentication (5) — login happy path, login with bad credentials, registration with valid data, logout clears session, session persists across reload.
- Product browsing (5) — list renders, search filters by name, category filter narrows results, sort by price ascending, product detail loads with correct data.
- Cart management (5) — add item, remove item, update quantity, empty cart shows empty state, cart contents survive page refresh.
- Checkout flow (5) — full happy path, shipping form validation, payment API failure path, guest checkout (no login), confirmation page shows order number.
- API tests (5) —
GET /api/productsreturns expected shape,POST /api/orderscreates an order,GET /api/users/merequires auth,DELETE /api/orders/:idis admin-only, error response on invalid payload.
cy.interceptstubs for at least three edge cases — empty product list (returns[]), checkout payment failure (returns 500), slow product list (delay 3s) (chapter 4, lesson 2).- Accessibility checks via
cypress-axeon at least three pages — homepage, product detail, checkout. Filter on critical + serious impact (chapter 7, lesson 3). - Mochawesome reporting configured with the merge + marge pipeline. Screenshots attached on failure (chapter 7, lesson 4).
- GitHub Actions workflow at
.github/workflows/cypress.ymlrunning on PR and nightly schedule, uploading artefacts on failure (chapter 8, lesson 1).
Stretch goals (optional)
Three add-ons that turn the project from "complete" to "showcase":
- Visual regression with
cypress-image-snapshotor Percy on three key pages (chapter 7, lesson 2). - Parallel execution in CI with a four-container matrix (chapter 8, lesson 3).
- Cypress Cloud integration with
record: trueand flake detection (chapter 8, lesson 4).
These are the differentiators. A team reviewing your portfolio will look at the capstone and decide whether you understand only the basics or whether you've built the kind of suite they'd actually want at work.
Capstone deliverables, mapped to chapters
- – Project scaffold (Ch 1)
- – Selectors + interactions (Ch 2)
- – DOM corners (Ch 3)
- – cy.intercept + stubbing (Ch 4)
- – Aliased waits (Ch 4)
- – cy.request for setup (Ch 4)
- – Fixtures (Ch 4)
- – Custom commands (Ch 5)
- – Page objects (Ch 5)
- – App actions (Ch 5)
- – Env config (Ch 5)
- – API login + cy.session (Ch 6)
- – Multi-step wizard tests (Ch 6)
- Screenshots + videos (Ch 7) –
- cypress-axe a11y (Ch 7) –
- Mochawesome reports (Ch 7) –
- GitHub Actions (Ch 8) –
- Parallelism (Ch 8) –
- Folder structure (Ch 9) –
- Factories + types (Ch 9) –
How long this should take
Based on the time the practice tasks took: a focused weekend to build the framework and the auth/product/cart tests; a second weekend for checkout, admin, accessibility, reporting, and CI. Don't try to do it in one sitting — the value comes from making each layer right, not from rushing.
If anything in the brief is unfamiliar, the chapter map above tells you exactly where to refresh. Each deliverable was the focus of a specific lesson; a quick re-read is faster than reinventing the pattern.
Acceptance criteria — how you'll know you're done
The capstone is complete when all eleven deliverables exist and:
npm run cy:runpasses locally with at least 25 tests green.npm run cy:reportproduces a Mochawesome HTML you can open in a browser.- The GitHub Actions workflow runs on a PR and posts a green check.
- A teammate (or your future self) can clone the repo, run
npm install, follow a one-line README to get tests running, and read the test names to understand what the suite covers.
The fourth bullet is the real one — a test suite that's hard to onboard into is a test suite the team will end up rewriting in six months. A teammate who's never seen the codebase should be able to add a new login test in fifteen minutes.
Submitting and reviewing
Push the project to GitHub. Make the README the front door — install steps, environment-variable list (with a cypress.env.example.json checked in), one paragraph explaining the folder structure, one paragraph explaining how to run smoke vs full vs CI. Add a screenshot of the Mochawesome report and the GitHub Actions tab.
The next lesson walks through each step of the build with concrete code. The third lesson is the self-assessment checklist and the stretch goals — and where to go after this course.
🛠️ Project work
This is the entire capstone. The "practice task" for this lesson is to read the brief end to end and pick your target app. Either commit to using Sauce Demo or scaffold a minimal ShopEasy yourself. Set up the empty folder structure (cypress/, pages/, utils/, support/, e2e/{auth,products,cart,checkout,admin,api,smoke}/) so the next lesson lands on a project ready to fill in.
Then read lesson 2 — the guided walkthrough — and start building. Don't try to write tests before the framework layer (types, factories, commands, page objects) is in place; the framework is what makes the tests fast to write and easy to maintain. By the end of lesson 2 you should have the full skeleton with three reference test files; lesson 3 is the review pass that polishes it into a portfolio piece.