Closed petebacondarwin closed 6 days ago
Latest commit: d38faec3ed6c3d6b2e04e2ee5f6fb40d07fcdf1e
Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.
Click here to learn what changesets are, and how to add one.
Click here if you're a maintainer who wants to add a changeset to this PR
A wrangler prerelease is available for testing. You can install this latest build in your project with:
npm install --save-dev https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9680655364/npm-package-wrangler-6077
You can reference the automatically updated head of this PR with:
npm install --save-dev https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/prs/6077/npm-package-wrangler-6077
Or you can use npx
with this latest build directly:
npx https://prerelease-registry.devprod.cloudflare.dev/workers-sdk/runs/9680655364/npm-package-wrangler-6077 dev path/to/script.js
wrangler@3.62.0
includes the following runtime dependencies:
Package | Constraint | Resolved |
---|---|---|
miniflare |
workspace:* | 3.20240620.0 |
workerd |
1.20240620.1 | 1.20240620.1 |
workerd --version |
1.20240620.1 | 2024-06-20 |
Please ensure constraints are pinned, and miniflare
/workerd
minor versions match.
I'll review this in detail next week, but it looks like a big change here is migrating from vitest fixtures to a new helper class that needs to be instantiated in each test. To me, that seems harder to use, and adds boilerplate to each test run. What was the reasoning for moving away from vitest fixtures here?
It also looks like there's a change from a single
run()
function to arunWranglerLongLived()
and arun()
function.
The boilerplate is actually quite small. The main difference is that you instantiate a class to get access to the methods rather than changing the it
calls to e2eTest
calls.
The primary motivation was that it was not possible to use e2eTest
to create a context that persisted across it
calls, which is an approach used in a bunch of the tests.
But also, for me, the e2eTest
approach used a bunch of Vitest magic that was not apparent on first looking at the code and required me to spend time digging around and reading up on the Vitest docs to understand what was going on and how it works. Simple class instantiation can be understood by anyone with a basic understanding of JS.
The move to split the run
command in two is somewhat subjective, but I feel that it is more discoverable since they have quite different flows. It was only when I was updating the docs that I realised that you could just await the original run
function to get a promise that effectively had very different usage than not awaiting it. While quite clever this is hard to discover and not intuitive. Finally the implementation of the new run
command is much less complex and avoids having to worry about killing the async child process since it just uses standard Node.js methods to run the process to completion.
Ironically e2e tests are now more stable but the fixture tests are flaking 😢
What this PR solves / how to test
child_process.kill()
doesn't really work on Windows. Usingkill-tree
library insteadkillAllWranglerDev()
helper could mess up parallel tests since it kills all wrangler/workerd processes regardless of whether they are part of the current testshellac
library has issues on Windows when running background tasks. Using simpleexecSync
andspawn
functions insteadWranglerE2ETestHelper
rather than thee2eTest
extension.Author has addressed the following