diff options
Diffstat (limited to 'packages/integrations/cloudflare/test/test-utils.js')
-rw-r--r-- | packages/integrations/cloudflare/test/test-utils.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/packages/integrations/cloudflare/test/test-utils.js b/packages/integrations/cloudflare/test/test-utils.js index 6bb3e7c25..41cc8a2c9 100644 --- a/packages/integrations/cloudflare/test/test-utils.js +++ b/packages/integrations/cloudflare/test/test-utils.js @@ -1,4 +1,6 @@ import { loadFixture as baseLoadFixture } from '../../../astro/test/test-utils.js'; +import { spawn } from 'child_process'; +import { fileURLToPath } from 'url'; export { fixLineEndings } from '../../../astro/test/test-utils.js'; @@ -8,3 +10,53 @@ export function loadFixture(config) { } return baseLoadFixture(config); } + +const wranglerPath = fileURLToPath(new URL('../node_modules/wrangler/bin/wrangler.js', import.meta.url)); + +export function runCLI(basePath, { silent }) { + const script = fileURLToPath(new URL(`${basePath}/dist/_worker.js`, import.meta.url)); + const p = spawn('node', [wranglerPath, 'dev', '-l', script]); + + p.stderr.setEncoding('utf-8'); + p.stdout.setEncoding('utf-8'); + + const timeout = 10000; + + const ready = new Promise(async (resolve, reject) => { + const failed = setTimeout(() => reject(new Error(`Timed out starting the wrangler CLI`)), timeout); + + (async function () { + for(const msg of p.stderr) { + if(!silent) { + // eslint-disable-next-line + console.error(msg); + } + } + })(); + + for await(const msg of p.stdout) { + if(!silent) { + // eslint-disable-next-line + console.log(msg); + } + if(msg.includes(`Listening on`)) { + break; + } + } + + clearTimeout(failed); + resolve(); + }); + + return { + ready, + stop() { + p.kill(); + return new Promise(resolve => { + p.addListener('exit', () => { + resolve(); + }); + }) + } + } +} |