diff options
Diffstat (limited to 'packages/integrations')
7 files changed, 119 insertions, 2 deletions
diff --git a/packages/integrations/cloudflare/package.json b/packages/integrations/cloudflare/package.json index 64a9e65a0..90dd2917b 100644 --- a/packages/integrations/cloudflare/package.json +++ b/packages/integrations/cloudflare/package.json @@ -25,10 +25,11 @@ "build": "astro-scripts build \"src/**/*.ts\" && tsc", "build:ci": "astro-scripts build \"src/**/*.ts\"", "dev": "astro-scripts dev \"src/**/*.ts\"", - "test": "mocha --exit --timeout 20000 test/" + "test": "mocha --exit --timeout 30000 test/" }, "dependencies": { - "esbuild": "^0.14.42" + "esbuild": "^0.14.42", + "wrangler": "^2.0.23" }, "devDependencies": { "astro": "workspace:*", diff --git a/packages/integrations/cloudflare/src/index.ts b/packages/integrations/cloudflare/src/index.ts index 37faf690e..99560dfdd 100644 --- a/packages/integrations/cloudflare/src/index.ts +++ b/packages/integrations/cloudflare/src/index.ts @@ -11,6 +11,11 @@ export function getAdapter(): AstroAdapter { }; } +const SHIM = `globalThis.process = { + argv: [], + env: {}, +};`; + export default function createIntegration(): AstroIntegration { let _config: AstroConfig; let _buildConfig: BuildConfig; @@ -69,6 +74,9 @@ export default function createIntegration(): AstroIntegration { format: 'esm', bundle: true, minify: true, + banner: { + js: SHIM + } }); // throw the server folder in the bin diff --git a/packages/integrations/cloudflare/test/basics.test.js b/packages/integrations/cloudflare/test/basics.test.js new file mode 100644 index 000000000..67215374d --- /dev/null +++ b/packages/integrations/cloudflare/test/basics.test.js @@ -0,0 +1,32 @@ +import { loadFixture, runCLI } from './test-utils.js'; +import { expect } from 'chai'; +import * as cheerio from 'cheerio'; + +describe('Basic app', () => { + /** @type {import('./test-utils').Fixture} */ + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/basics/', + }); + await fixture.build(); + }); + + it('can render', async () => { + const { ready, stop } = runCLI('./fixtures/basics/', { silent: true }); + + try { + await ready; + + let res = await fetch(`http://localhost:8787/`); + expect(res.status).to.equal(200); + let html = await res.text(); + let $ = cheerio.load(html); + expect($('h1').text()).to.equal('Testing'); + } finally { + await stop(); + } + }); +}); + diff --git a/packages/integrations/cloudflare/test/fixtures/basics/astro.config.mjs b/packages/integrations/cloudflare/test/fixtures/basics/astro.config.mjs new file mode 100644 index 000000000..bf47a0a33 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/basics/astro.config.mjs @@ -0,0 +1,7 @@ +import { defineConfig } from 'astro/config'; +import cloudflare from '@astrojs/cloudflare'; + +export default defineConfig({ + adapter: cloudflare(), + output: 'server', +}); diff --git a/packages/integrations/cloudflare/test/fixtures/basics/package.json b/packages/integrations/cloudflare/test/fixtures/basics/package.json new file mode 100644 index 000000000..c7cc97455 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/basics/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/astro-cloudflare-basics", + "version": "0.0.0", + "private": true, + "dependencies": { + "@astrojs/cloudflare": "workspace:*", + "astro": "workspace:*" + } +} diff --git a/packages/integrations/cloudflare/test/fixtures/basics/src/pages/index.astro b/packages/integrations/cloudflare/test/fixtures/basics/src/pages/index.astro new file mode 100644 index 000000000..9c077e2a3 --- /dev/null +++ b/packages/integrations/cloudflare/test/fixtures/basics/src/pages/index.astro @@ -0,0 +1,8 @@ +<html> + <head> + <title>Testing</title> + </head> + <body> + <h1>Testing</h1> + </body> +</html> 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(); + }); + }) + } + } +} |