WordPress core Core is the set of software required to run WordPress. The Core Development Team builds WordPress. runs about 31,000 PHPUnit tests on every commit. These tests need maintenance just like core code: many leak state into other tests, some assert nothing, and several are coupled to network (versus site, blog) calls.
A goal for the Build/Test Tools component for the 7.2 release is to reduce build time and load across wordpress-develop and related repos. A healthier test suite will help!
This post is intended to show the pieces any contributor can claim, the same way the JSHint effort did in 2013. Same model is running today for 7.2 in PHPStan (#65817), docblocks (#65860), TypeScript (#65997), and JSDoc (#66033).
We need two kinds of help: 1) fix patches and 2) code reviews.
Why now
- We can now measure the suite. Pushes to
trunk now publish timing metrics to CodeVitals, and we can now flag tests that take too long as candidates to improve (see #65887).
- Isolation helps find good next fixes. Running the tests in random order exposes tight coupling and shared state. Two batches of fixes are already in from WordCamp WordCamps are casual, locally-organized conferences covering everything related to WordPress. They're one of the places where the WordPress community comes together to teach one another what they’ve learned throughout the year and share the joy. Learn more. US 2026 contributor day Contributor Days are standalone days, frequently held before or after WordCamps but they can also happen at any time. They are events where people get together to work on various areas of https://make.wordpress.org/ There are many teams that people can participate in, each with a different focus. https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/, and 13 more pull requests are open that need your help (see #65893).
- We are shaping a queue for you to jump right in: pull requests with no reviewer, and umbrella tickets with no owner yet.
How to claim a new piece
- Pick an item from the tracks of work below; leave a comment on the Trac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. ticket Created for both bug reports and feature development on the bug tracker. and here on this post.
- Open pull requests and help review and finalize existing PRs.
Please follow the handbook pages on running the suite and writing PHP tests.
Reviewers wanted
Test isolation, #65893. Run the touched directory under two random seeds and once in default order, and confirm the patch A special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing. restores state in tear_down() or the base testcase rather than special-casing one test. Examples: #13181 admin (and super admin), #13186 comment globals, #13187 user fixtures, #13191 Ajax hooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same., #13193 rewrite and query, and #13205 themes.
External HTTP HTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. guard, #63083. #13407 makes a test fail if it reaches the network without being in the external-http group. See the description for a 5-step test plan.
Strict assertions, #64895. #12583, #11707 and #12613. Check each assertSame() against the function’s documented return type.
Class split, #65208. Paused until after 7.2; see this update. Eighteen pull requests are open; the ticket lists them. Check that the file name matches the class name, that @covers moved with the tests, and that npm run test:php -- --test-suffix .php tests/phpunit/tests/admin passes.
Here are the tracks of work
First core contribution? Start with #65819, the catch-all for small test fixes. Great spot to jump in.
1. Test isolation: #65893
Done looks like: every directory under tests/phpunit/tests/ passes in random order.
Claim: a directory.
Command: npm run test:php -- --test-suffix .php tests/phpunit/tests/<dir> --order-by=random --random-order-seed=1, then again with seed 2, then once without the flags. Fix what fails by restoring state, not by reordering.
2. Tests that assert nothing: #40538
Trunk A directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. carries 101 @doesNotPerformAssertions annotations in 26 files, 98 of them in REST controller tests. The cause is structural, and #66073 proposes a fix in the base testcase. The per-file read can start now.
Done looks like: each annotated method is either a real assertion, or documented as a route that has no such operation.
Claim: a file.
Command: npm run test:php -- --filter <Class_Name>. Please do not resolve one with assertTrue( true ).
3. Strict assertions: #64895
501 assertEquals() calls remain in 124 files. assertSame() also checks the type, which is where falsy bugs hide.
Done looks like: a directory with no assertEquals() left, or a note on each one that is loose on purpose.
Claim: a directory.
Command: npm run test:php -- --test-suffix .php tests/phpunit/tests/<dir>.
4. Split and rename test classes: #65208
Paused until after 7.2. See this update.
One test class per unit of code, with the file named after the class. It is the prerequisite for PHPUnit 12 (#62004) and it has stalled for want of eyes.
Done looks like: a directory where every file follows the pattern in #53010.
Claim: a directory that no open pull request touches; the ticket lists them.
Command: npm run test:php -- --test-suffix .php tests/phpunit/tests/<dir>. Use git mv so history follows.
CC @pbearne in case you want to claim this one!
5. External HTTP tests: #63914
Tests that make live requests fail when the network or wordpress.org The community site where WordPress code is created and shared by the users. This is where you can download the source code for WordPress core, plugins and themes as well as the central location for community conversations and organization. https://wordpress.org/ has a bad day. Once the guard in PR #13407 lands, the group can be emptied one file at a time.
Done looks like: the test proves the same thing against a mocked response, and leaves the external-http group.
Claim: a file. Opens when PR #13407 lands.
Command: npm run test:php -- --group external-http before and after.
6. Slow test classes: #66074
Half the suite’s test time sits in 22 of its 1,066 classes, and REST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”)
https://developer.wordpress.org/rest-api/ classes alone are about half. The handbook already says shared fixtures belong in wpSetUpBeforeClass().
Done looks like: the class runs measurably faster with the same assertions, and the before-and-after numbers are on the ticket.
Claim: a class.
Command: npm run test:php -- --filter <Class_Name>, then read time in tests/phpunit/build/logs/junit.xml.
7. Small cleanups: #65819
Dead helpers, redundant arguments, legacy stub syntax, misnamed tests. Anything small that makes a test file easier to read. No claim needed.
8. Skip the PHPUnit matrix on CSS Cascading Style Sheets.- and JS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors.-only pull requests: #65889
The exploratory work found the ten tests that depend on asset files. Two steps remain: group them, then run only that group when a pull request touches no PHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher. One owner for both steps; comment on the ticket to take it.
Get in touch
Patch specifics belong on the Trac ticket and pull requests. The effort as a whole lives in #core-build-test-tools, and we meet as a team in Slack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ every other Tuesday at 15:00 UTC (next: September 22, 2026). Join us—all are welcome!
Special thanks
To everyone whose work got the suite this far in the last month: @mdawaffe and @jonsurrell for the isolation fixes and the 13 pull requests behind them, @mindctrl for reviewing them, @soean for a steady run of cleanups, @sergeybiryukov for landing them, @adrianmoldovanwp and @lucatume for the guard and the reviews, @desrosj, @johnbillion, @peterwilsoncc and @youknowriad for the timing metrics and the tickets that frame this work, and @theanamhossain for his first core commit that made the E2E install test repeatable.
#build-test-tools, #phpunit