Wheels 4.0 testing — Playwright Java, HTTP test client, parallel runner, zero-Docker inner loop #2495
bpamiri
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Testing got a major upgrade in 4.0. The list:
1. Browser testing (Playwright Java)
#2113, #2115, #2116, #2121, #2122 — new
BrowserTestbase class drives a real Chromium through a fluent DSL wrapping Playwright Java.component extends="wheels.wheelstest.BrowserTest" { function run() { browserDescribe("Login flow", () => { it("logs in and lands on dashboard", () => { if (this.browserTestSkipped) return; this.browser .visit("/login") .fill("##email", "a@example.com") .fill("##password", "secret") .click("button[type=submit]") .assertUrlContains("/dashboard") .assertSee("Welcome"); }); }); } }DSL surface: navigation, interaction, keyboard, waiting, scoping (
within), cookies, auth (loginAs/logout), dialogs, viewport (resizeToMobile/resizeToTablet/resizeToDesktop), arbitraryscriptevaluation, screenshots, and a full assertion suite (text, visibility, URL, title, query string, form values).Install:
wheels browser setup(~370MB — Playwright JARs + Chromium). CI installs and runs browser specs automatically; specs gracefully skip when JARs are missing so local runs without Playwright stay green.2. HTTP test client
#2099 — fluent integration testing without a browser:
TestClient .visit("/api/users") .assertOk() .assertJsonPath("data.0.name", "Alice") .assertHeader("Content-Type", "application/json"); TestClient .followRedirects(false) .post("/login", {email: "...", password: "..."}) .assertRedirect("/dashboard");Full assertion set: status (
assertOk,assertStatus), body (assertSee,assertDontSee,assertSeeInOrder), JSON (assertJson,assertJsonPathwith dot notation), redirects, headers, cookies. Cookies are tracked across requests for session tests.3. Parallel test runner
#2100 — partition test bundles across workers, aggregate results:
cfthread.4. Zero-Docker inner loop
bash tools/test-local.shruns the full core test suite on LuCLI + SQLite in ~60s. The CI pipeline runs the same stack (#2032), so "passes locally" and "passes CI" are the same claim.Cross-engine validation (Adobe CF, BoxLang, MySQL, Postgres, SQL Server, CockroachDB) is still available via Docker for pre-merge. Engine-grouped testing (#1939) cut the matrix from 42 jobs to 8.
5. BDD-only posture
testbox→wheelstestnamespace rename (#1889) — new tests extendwheels.WheelsTest.tests/specs/functions/→tests/specs/functional/(#1872).Links
Question for the thread
Browser testing is new-for-CFML territory. If you've adopted Playwright / Capybara / Dusk in another stack, what's the single feature from that toolkit that would most make you trust
BrowserTestfor the hairier specs? Good input for 4.0.x point releases.Read the full post: https://blog.wheels.dev/posts/testing-in-wheels-4/
Beta Was this translation helpful? Give feedback.
All reactions