The reliable way to test WordPress is to use several layers, not one giant test suite. Run isolated PHPUnit tests for your own PHP logic, WordPress-backed integration tests for hooks and core APIs, browser end-to-end (E2E) tests for real user journeys, and a separate content-and-rendering pass for themes. WordPress Playground can run PHPUnit in a clean environment without a local database, while Playwright covers browser behavior.
This tutorial shows how to choose the right layer, create a repeatable environment, run the official Playground commands, test themes with realistic content, exercise multiple WordPress and PHP versions, and diagnose common failures. The linked procedures come from the WordPress Playground PHPUnit guide (last updated September 30, 2026), the Playwright E2E guide, and the WordPress Theme and WP-CLI handbooks.
As an Amazon Associate I earn from qualifying purchases.
Choose the test layer before writing a test
A test is useful when it exercises the layer where a regression can occur. A PHP assertion cannot prove that a browser button is visible, and a manual visual check cannot reliably protect a hook or data transformation from a later code change.
| Layer | What it exercises | Typical setup | What it cannot establish |
|---|---|---|---|
| Unit | One class, function, or rule in isolation | PHPUnit with WordPress excluded from the process | Whether WordPress hooks, queries, templates, or browser behavior work |
| Integration | Plugin or theme interaction with WordPress core and its APIs | PHPUnit plus a clean WordPress installation, such as Playground | Whether a user can complete a workflow in a real browser |
| Browser E2E | Clicks, form entry, navigation, and visible outcomes | Playwright, Node.js, a browser, and a WordPress site | Every internal PHP branch or all supported server combinations |
| Theme/content review | Template rendering, CSS, JavaScript, accessibility-related presentation, and edge-case content | Theme Unit Test data plus manual browser inspection | Long-term regression protection without repeatable automated checks |
Use unit tests for code that does not need WordPress
A pure unit test isolates your code without loading WordPress. Keep parsing, validation, formatting, calculations, and other deterministic rules in this layer whenever practical. These tests normally provide the fastest feedback because they do not boot WordPress or a browser.
#1 Best Overall
- [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
- [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
- [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
- [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
- [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.
Use integration tests for WordPress contracts
When the behavior depends on hooks, options, metadata, queries, REST routes, shortcodes, capabilities, or another WordPress API, load WordPress and test the interaction. The WP-CLI handbook distinguishes these WordPress-backed tests from pure unit tests in its Plugin Integration Tests guidance.
Use E2E tests for user-visible workflows
E2E tests follow the site as a user does: open a page, click a control, enter data, submit a form, navigate, and assert what is visible. They are the right protection for workflows such as activating a setting, submitting a front-end form, or checking that an admin notice appears. They complement, rather than replace, PHP tests.
Themes need both automation and inspection
A theme can pass PHP tests while still breaking on a long title, a nested comment, a differently proportioned image, or mixed HTML. Theme testing therefore combines realistic content, template checks, browser checks, and repeatable regression tests.
Create an isolated, repeatable environment
Do not run destructive tests against production. Use a disposable local install, a private replica, or WordPress Playground. Playground runs locally in the browser; its quick-start guide says it does not upload a site unless you explicitly choose an action such as exporting to GitHub. You can preserve a setup with browser storage or ZIP export/import.
- Keep test content and credentials separate from production.
- Start integration runs from a clean WordPress installation so one test cannot leave options, posts, or users that change the next result.
- Record the WordPress and PHP versions used for every compatibility run.
- Keep fixtures small and deterministic; reset external services or replace them with test doubles where possible.
For experiments that need a copy of a site, Playground’s testing documentation describes private site replicas. Treat any imported content as test data and remove secrets before sharing an export.
Rank #2
- 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
- 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
- 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
- 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
- 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
How do I run PHPUnit tests for WordPress?
The current official Playground CLI procedure assumes PHPUnit is installed with Composer. From your plugin or theme directory, install it as a development dependency:
composer require --dev phpunit/phpunit
The command below starts a clean WordPress environment, automatically mounts the current plugin or theme, and runs the package’s PHPUnit configuration. Replace MY_PLUGIN and the path to your own project.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →npx @wp-playground/cli@latest php --auto-mount -- /wordpress/wp-content/plugins/MY_PLUGIN/vendor/bin/phpunit -c /wordpress/wp-content/plugins/MY_PLUGIN/phpunit.xml.dist
This is the documented command in Running PHPUnit with the Playground CLI. The --auto-mount option detects a plugin, theme, or current WordPress directory and mounts it beneath /wordpress/wp-content/.
Mount a project explicitly when auto-detection is not enough
Use Playground’s --mount option when you need a precise host-to-WordPress mapping, such as a monorepo or a project outside the directory from which you launch the command. Keep the PHPUnit path inside the mounted project and point -c at the configuration file that belongs to that project.
Run a theme instead of a plugin
For a theme, substitute themes/THEME_NAME for the plugin path in the command and use the theme’s own test directory and phpunit.xml.dist. The same clean-install behavior applies.
Rank #3
- [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
- [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
- [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
- [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
- [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
Select PHP and WordPress versions deliberately
The Playground guide documents --php and --wp flags. On September 30, 2026, that guide reported PHP 7.4 through 8.5 and accepted a WordPress version, latest, nightly, or beta. These ranges and labels can change, so check the current guide before pinning a matrix.
npx @wp-playground/cli@latest php --php=8.2 --wp=latest --auto-mount -- /wordpress/wp-content/plugins/MY_PLUGIN/vendor/bin/phpunit -c /wordpress/wp-content/plugins/MY_PLUGIN/phpunit.xml.dist
Repeat the run for each PHP and WordPress combination that your stated support policy promises. A pass on one pair is evidence for that pair, not proof of universal compatibility.
Organize tests around behavior
Keep unit tests close to the classes they exercise and integration tests in a clearly separate suite. Name tests after an observable rule, such as “rejects an expired token” or “registers the REST route for an authenticated editor,” rather than after an implementation detail. This makes a failure tell you which contract changed.
Add browser coverage with Playwright
The official E2E Testing with Playwright and WordPress Playground guide combines Playwright with Playground so you can avoid Docker, manual database provisioning, and hand-built setup. Its prerequisites are Node.js 20 or newer and a plugin, theme, or site to test.
Install the documented packages
npm install --save-dev @playwright/test @wp-playground/cli
npx playwright install chromium
Put browser tests in a dedicated directory and make each test establish the state it needs. A useful test follows this sequence:
Recommended Free Tools
Rank #4
- Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
- Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
- All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
- Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
- Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
- Start or connect to the test WordPress site.
- Navigate to the exact front-end or admin URL under test.
- Perform the user action, such as clicking a button or submitting a form.
- Assert a visible result, URL change, message, or persisted value.
- Capture a trace or screenshot only when it helps diagnose a failure; do not use screenshots as a substitute for an assertion.
Keep E2E coverage focused on high-value journeys. PHP tests should still cover validation, permissions, data handling, and error branches that would be expensive to reach through a browser.
How do I test a WordPress theme?
Start with varied, realistic content. The Theme Handbook’s Testing page provides importable Theme Unit Test data containing posts, pages, comments, and media. It includes cases such as long titles, differently sized images, nested comments, and mixed HTML. Import it with the WordPress Importer, then inspect every relevant template. WordPress describes this data as one part of a broader process, not a complete certification.
Run the manual theme checklist
- Enable
WP_DEBUGin the test environment. - Check the template files and exercise the Theme Unit Test content.
- Validate generated HTML and CSS.
- Open the browser console and fix JavaScript errors.
- Check the target browsers for your project. The handbook’s examples include Safari, Chrome, Opera, Firefox, and Microsoft Edge.
- Remove temporary debug settings and material before release.
The handbook also names optional aids. Theme Check inspects a theme against Theme Review Guidelines. Debug Bar and Query Monitor help inspect runtime behavior, while Log Deprecated Notices surfaces deprecated calls. Monster Widget is listed for classic-theme testing. None is mandatory; choose the tool that answers the question you are investigating.
Turn visual findings into regression checks
When a manual pass finds a defect, first decide whether it is a data or logic problem, a template problem, or a browser-only presentation problem. Add a PHPUnit test for deterministic logic, an integration test for a WordPress contract, or a Playwright assertion for the user-visible workflow. Keep the manual visual pass for layout, typography, responsive behavior, and browser differences that assertions cannot fully describe.
Test compatibility across WordPress and PHP versions
Write down your supported range before building the matrix. Include the oldest PHP version you claim, the newest version you routinely support, the oldest WordPress version compatible with your code, and the current release. Add beta or nightly WordPress only when you want early-warning feedback; the Playground guide explicitly supports those labels.
Best Value
| Run | Purpose | Action |
|---|---|---|
| Minimum supported PHP + minimum supported WordPress | Find syntax, API, and compatibility regressions at the lower boundary | Run the full unit and integration suites |
| Current PHP + current WordPress | Verify the normal release path | Run PHP, integration, and selected E2E tests |
| Newest supported PHP + current WordPress | Catch deprecations and forward-compatibility issues | Run with deprecation reporting enabled in the test environment |
| Current WordPress beta or nightly | Get early warning about upcoming core changes | Run a non-release, informational job and investigate failures before upgrading |
Use the Playground --php and --wp flags to make each combination explicit. Do not silently replace a failing lower-bound run with a newer version; that hides the exact compatibility break you need to fix.
Or skip the browser setup
If you need a clean screenshot of a test page, staging URL, visual fixture, or documentation example, ScreenshotNeo returns an image or PDF from one GET request. Its capture flow accepts cookie or consent banners as a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before the shot; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and whether it was billed.
Use the API documentation at https://screenshotneo.com/docs/ for the complete option set. A minimal call is:
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →curl -G 'https://api.screenshotneo.com/v1/shot' -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python
import requests
r = requests.get('https://api.screenshotneo.com/v1/shot', params={'access_key': 'YOUR_API_KEY', 'url': 'https://stripe.com'}, timeout=90)
open('shot.webp', 'wb').write(r.content)
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
For WordPress testing, useful options include full-page capture with lazy images loaded, a CSS-selector element capture, dark mode, device presets or a custom viewport, retina scale, PDF paper size and page ranges, custom CSS or JavaScript, clicks before capture, hidden selectors, waits for a selector, delay, or network idle, request and resource blocking, custom headers, cookies, user agents and Authorization, timezone and geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed links, asynchronous jobs with signed webhooks, bulk capture for up to 100 URLs per call, and a usage API. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
The Free plan includes 1,000 shots per month with no card. Paid plans start at $5 for 3,000 shots; yearly billing gives two months free, and every feature is available on every plan. Create a free ScreenshotNeo account to try it without a card.
Troubleshoot failed or misleading tests
| Symptom | Likely cause | Fix |
|---|---|---|
| Composer cannot find PHPUnit | Dependencies were not installed in the project directory | Run composer require --dev phpunit/phpunit from the plugin or theme directory, then verify the vendor path in the Playground command. |
| Playground cannot find the plugin or theme | Auto-mount started from the wrong directory or the project is in a monorepo | Run from the project directory or replace --auto-mount with an explicit --mount mapping. |
| Tests pass locally but fail in another run | State leaked between tests or the versions differ | Use a clean Playground run, reset created data, and record --php and --wp values. |
| PHP tests pass but the workflow is broken | No browser assertion covers the user journey | Add a focused Playwright test for the click, form submission, navigation, and visible result. |
| Playwright cannot launch Chromium | The browser binary was not installed | Run npx playwright install chromium and confirm Node.js 20 or newer. |
| Theme looks correct with ordinary content but breaks in review | Edge-case content was never loaded | Import Theme Unit Test data and inspect long titles, image sizes, nested comments, mixed HTML, and media templates. |
| Debug output is clean on one browser but not another | Browser-specific JavaScript or CSS behavior | Check the console and rendered HTML/CSS in each target browser, then add an automated assertion for the reproducible behavior. |
| A compatibility run reports a failure only on beta or nightly WordPress | Core behavior may have changed before release | Keep the run informational, isolate the failing integration, and track the change before updating your supported version. |
Make the suite fast and trustworthy
- Run pure unit tests on every change because they provide the shortest feedback loop.
- Run WordPress integration tests next, using a clean environment so order and leftovers do not affect results.
- Reserve the full browser suite for pull requests, release candidates, or other high-value checkpoints if runtime is a constraint.
- Keep a small smoke path for the most important workflow and a broader suite for scheduled compatibility runs.
- Pin or record the versions used by release checks; otherwise a moving
latestor nightly run can change independently of your code. - When a test fails, preserve the failing version pair, URL, fixture, and browser action so another developer can reproduce it.
Reliability comes from matching assertions to scope. A green unit suite means isolated logic passed. A green integration suite means the tested WordPress contracts passed in that environment. A green E2E run means the scripted browser journey worked under that browser and site state. Treat each result as evidence for its layer.
Release checklist
- Unit tests cover project logic that does not require WordPress.
- Integration tests cover hooks, options, metadata, queries, permissions, REST routes, and other WordPress APIs your code uses.
- Playwright covers the highest-risk front-end and admin workflows.
- Theme Unit Test data has been imported and reviewed.
- HTML, CSS, and JavaScript console errors have been checked in target browsers.
- The support-policy PHP and WordPress matrix has passed, or any exception is documented.
- Temporary
WP_DEBUGchanges, notes, test accounts, and test data are removed from the release artifact. - Tests run from a disposable environment and do not depend on production state.
Frequently Asked Questions
Can I use WordPress Playground for a production-like staging site?
Use it for isolated development, experiments, and test replicas rather than as a replacement for a production hosting environment. Keep production credentials and private customer data out of exported test bundles.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Should every test run against every PHP and WordPress version?
Run the complete suite for the versions in your support policy. Use a smaller smoke set for early-warning beta or nightly runs when the full matrix would be impractical.
When is a screenshot an assertion instead of documentation?
Use a semantic assertion for behavior, such as a visible message or URL. Treat screenshots as diagnostic evidence or a visual-review artifact unless you have deliberately established and maintained image-diff baselines.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

