How to test your WooCommerce checkout after plugin updates
Most WooCommerce outages don't take the site down. The home page loads, product pages look fine, and the uptime monitor stays green. But the card field doesn't appear, the basket empties itself, or Place Order spins forever. Customers leave quietly, and the first sign is often the client asking why orders stopped.
This guide covers what usually breaks, a checklist for testing after every round of updates, how to test without taking real payments, how to roll back, and how to automate the whole thing.
Why updates break checkouts
The checkout is where the most moving parts meet: your theme, WooCommerce itself, a payment plugin, the payment provider's JavaScript, shipping and tax plugins, and whatever caching or optimisation plugin is running. An update to any of them can break it. The usual causes are:
- Payment plugin updates. A new version of a gateway plugin changes how its card fields load, and a conflict with another script stops them rendering.
- JavaScript optimisation. Caching and minification plugins that combine or delay scripts can break payment providers' scripts, especially after either side updates.
- Outdated template overrides. Themes that override WooCommerce templates can fall behind after a WooCommerce update. Check WooCommerce → Status → System status. The Templates section flags outdated overrides.
- Block vs classic checkout. Plugins that add checkout fields or change behaviour may support one checkout type and not the other, so a switch or update exposes the gap.
- Page caching. Cart and checkout pages must not be cached. A new caching rule or plugin update that caches them causes empty baskets and expired-session errors.
- PHP version changes. A host upgrading PHP can turn an old plugin's warnings into fatal errors on checkout requests.
The post-update checkout checklist
Run through this after every update session, on every shop. It takes about five minutes once you're used to it.
- Open a private browser window so you see what a logged-out customer sees, without your admin cookies or cached sessions.
- Add a product to the basket from a product page, not just via a direct link. Check the mini-cart or basket count updates.
- Open the basket. Check quantities, totals, coupons (if used) and the shipping calculator.
- Go to checkout. Check the billing and shipping fields appear, the address lookup works, and shipping options update when you change the postcode or country.
- Check each payment method. Select each one and confirm its fields or button appear: card fields for Stripe or WooPayments, the PayPal button, and so on.
- Open the browser console (F12 → Console) and look for red errors. A payment script error here is the most common silent failure.
- Place a test order in test mode (see below) and check the thank-you page, the order in the admin, and the confirmation email.
- Check on a phone. Mobile layouts break differently, and most shoppers are on mobile.
Testing payments without taking real money
The safest option is a staging copy of the shop. Many hosts offer one-click staging. On staging you can switch the payment plugins to test mode and place as many orders as you like.
- Stripe has a test mode with test API keys. The test card
4242 4242 4242 4242with any future expiry date and any CVC succeeds. - WooPayments has a test (sandbox) mode in its settings for the same purpose.
- PayPal provides a sandbox environment with test buyer accounts.
Avoid switching the live shop into test mode. Real customers checking out at the same time would have their payments fail. If you must test on the live site, either stop before paying (everything up to and including "the payment fields load" can be checked safely) or place a real low-value order and refund it.
If something is broken: roll back first, investigate second
When the checkout breaks after an update, the priority is getting customers paying again. Work out why afterwards.
- Find the culprit. If you updated several plugins at once, the payment plugin, WooCommerce and any caching or optimisation plugin are the usual suspects. Clear all caches first. Sometimes that alone fixes it.
- Roll back that plugin to its previous version, from a backup or with a rollback tool such as the free WP Rollback plugin for plugins hosted on WordPress.org.
- Re-run the checklist to confirm the checkout works again.
- Hold that update until a fixed version is out, and check the plugin's changelog and support forum. Someone else has often reported the same problem.
One caveat: some updates, particularly major WooCommerce releases, also change the database. Rolling back the files won't undo that, so those updates deserve a staging test first and a full backup before you start.
Automating it
Doing the checklist by hand works for one shop. Across ten client shops, it quietly stops happening. There are three ways to automate it.
1. Write your own browser test
Tools like Playwright can drive a real browser through the checkout. A minimal check that stops before payment looks like this:
// checkout-check.spec.ts (Playwright)
import { test, expect } from '@playwright/test';
test('checkout loads payment fields', async ({ page }) => {
const errors: string[] = [];
page.on('pageerror', (e) => errors.push(e.message));
await page.goto('https://shop.example.com/?add-to-cart=123'); // a simple, in-stock product ID
await page.goto('https://shop.example.com/checkout/');
await expect(page.locator('#payment, .wc-block-checkout__payment-method')).toBeVisible();
// Stripe card fields load inside an iframe
await expect(page.locator('iframe[src*="js.stripe.com"]').first()).toBeAttached();
expect(errors).toEqual([]);
});
You then need to schedule it, run it after every update, keep selectors working as themes change, and alert someone when it fails.
2. Use a checkout monitoring service
Dedicated services run a scripted checkout on a schedule and alert you when it fails. They work well, but they're usually priced per shop, and they don't know when you've just updated, so a failure may be spotted hours later.
3. Tie the test to the update itself
The most reliable approach is to test the checkout as part of the update: check it before, update, check again, and roll back automatically if it fails. The checkout is never broken for longer than the test takes.
That's what we're building with PatchSure. It updates your clients' WordPress sites, tests every WooCommerce checkout straight afterwards, rolls back the update responsible if anything breaks, and explains what happened in your client's monthly report.
Join the early-access listQuick reference
| Check | Catches |
|---|---|
| Add to basket + basket totals | Broken add-to-cart, session and caching problems |
| Checkout fields + shipping update | Checkout field plugins, AJAX errors, template overrides |
| Payment fields visible | Gateway script conflicts, optimisation plugins |
| Browser console clean | JavaScript errors that silently block payment |
| Test-mode order on staging | Payment processing, order emails, thank-you page |
| Mobile check | Layout issues hiding the Place Order button |