Skip to content

Commit

Permalink
add double check on astro file return type to display more human read…
Browse files Browse the repository at this point in the history
…able error (#4857)
  • Loading branch information
xstevenyung committed Sep 26, 2022
1 parent e948f62 commit 6fd00c4
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 2 deletions.
2 changes: 2 additions & 0 deletions examples/ssr/src/pages/index.astro
Expand Up @@ -6,6 +6,8 @@ import { getProducts } from '../api';
import '../styles/common.css';
const products = await getProducts(Astro.request);
return;
---

<html lang="en">
Expand Down
9 changes: 7 additions & 2 deletions packages/astro/src/runtime/server/render/page.ts
Expand Up @@ -112,7 +112,12 @@ export async function renderPage(

let response = createResponse(body, { ...init, headers });
return response;
} else {
return factoryReturnValue;
}

// We double check if the file return a Response
if (!(factoryReturnValue instanceof Response)) {
throw new Error('Only instance of Response can be returned from an Astro file');
}

return factoryReturnValue;
}
35 changes: 35 additions & 0 deletions packages/astro/test/astro-not-response.test.js
@@ -0,0 +1,35 @@
import { expect, assert } from 'chai';
import { loadFixture } from './test-utils.js';

// Asset bundling
describe('Not returning responses', () => {
let fixture;
/** @type {import('./test-utils').DevServer} */
let devServer;

before(async () => {
fixture = await loadFixture({
root: './fixtures/astro-not-response/',
});

devServer = await fixture.startDevServer();
});

after(async () => {
await devServer.stop();
});

it('Does not work from a page', async () => {
try {
await fixture.build();
} catch (e) {
expect(e).to.be.instanceOf(
Error,
'Only instance of Response can be returned from an Astro file'
);
return null;
}

assert.fail('Should have thrown an error');
});
});
8 changes: 8 additions & 0 deletions packages/astro/test/fixtures/astro-not-response/package.json
@@ -0,0 +1,8 @@
{
"name": "@test/astro-not-response",
"version": "0.0.0",
"private": true,
"dependencies": {
"astro": "workspace:*"
}
}
@@ -0,0 +1,3 @@
---
return null;
---
6 changes: 6 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6fd00c4

Please sign in to comment.