diff --git a/fixtures/nodejs-hybrid-app/src/index.ts b/fixtures/nodejs-hybrid-app/src/index.ts index de35f8f3afe7b..2a2d30add1264 100644 --- a/fixtures/nodejs-hybrid-app/src/index.ts +++ b/fixtures/nodejs-hybrid-app/src/index.ts @@ -28,6 +28,8 @@ export default { return testX509Certificate(); case "/test-require-alias": return testRequireUenvAliasedPackages(); + case "/test-immediate": + return await testImmediate(); } return new Response( @@ -42,6 +44,26 @@ export default { }, }; +async function testImmediate() { + try { + await new Promise((resolve, reject) => { + // Give it a whole second otherwise it times-out + setTimeout(reject, 1000); + + // This setImmediate should never trigger the reject if the clearImmediate is working + const id = setImmediate(reject); + // clearImmediate should cancel reject callback + clearImmediate(id); + // This setImmediate should trigger the resolve callback + setImmediate(resolve); + }); + + return new Response("OK"); + } catch (e) { + return new Response(`NOT OK: ${e}`); + } +} + function testRequireUenvAliasedPackages() { const fetch = require("cross-fetch"); const supportsDefaultExports = typeof fetch === "function"; diff --git a/fixtures/nodejs-hybrid-app/tests/index.test.ts b/fixtures/nodejs-hybrid-app/tests/index.test.ts index d5510c5a5bc34..d55c1edc913c5 100644 --- a/fixtures/nodejs-hybrid-app/tests/index.test.ts +++ b/fixtures/nodejs-hybrid-app/tests/index.test.ts @@ -58,4 +58,10 @@ describe("nodejs compat", () => { const response = await fetch(`http://${ip}:${port}/test-require-alias`); await expect(response.text()).resolves.toBe(`"OK!"`); }); + + test("set/clearImmediate", async ({ expect }) => { + const { ip, port } = wrangler; + const response = await fetch(`http://${ip}:${port}/test-immediate`); + await expect(response.text()).resolves.toBe("OK"); + }); });