991c30a72a
* Don't run dev mode tests on windows * Debugging * chore(lint): Prettier fix * remove the throw * Skip a different way * chore(lint): Prettier fix * Skip the error test on windows too * chore(lint): Prettier fix * Move the after into the closure * chore(lint): Prettier fix Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
208 lines
4.8 KiB
JavaScript
208 lines
4.8 KiB
JavaScript
import { expect } from 'chai';
|
|
import { isWindows, loadFixture } from './test-utils.js';
|
|
|
|
describe('Error display', () => {
|
|
if (isWindows) return;
|
|
|
|
let fixture;
|
|
let devServer;
|
|
|
|
before(async () => {
|
|
fixture = await loadFixture({
|
|
projectRoot: './fixtures/errors',
|
|
renderers: ['@astrojs/renderer-preact', '@astrojs/renderer-react', '@astrojs/renderer-solid', '@astrojs/renderer-svelte', '@astrojs/renderer-vue'],
|
|
vite: {
|
|
optimizeDeps: false, // necessary to prevent Vite throwing on bad files
|
|
},
|
|
});
|
|
devServer = await fixture.startDevServer();
|
|
});
|
|
|
|
after(async () => {
|
|
await devServer.stop();
|
|
});
|
|
|
|
describe('Astro', () => {
|
|
it('syntax error in template', async () => {
|
|
const res = await fixture.fetch('/astro-syntax-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Unexpected "}"');
|
|
});
|
|
|
|
it('syntax error in frontmatter', async () => {
|
|
const res = await fixture.fetch('/astro-frontmatter-syntax-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Unexpected end of frontmatter');
|
|
});
|
|
|
|
it('runtime error', async () => {
|
|
const res = await fixture.fetch('/astro-runtime-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('ReferenceError: title is not defined');
|
|
|
|
// TODO: improve and test stacktrace
|
|
});
|
|
|
|
it('hydration error', async () => {
|
|
const res = await fixture.fetch('/astro-hydration-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Error: invalid hydration directive');
|
|
});
|
|
|
|
it('client:media error', async () => {
|
|
const res = await fixture.fetch('/astro-client-media-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Error: Media query must be provided');
|
|
});
|
|
});
|
|
|
|
describe('JS', () => {
|
|
it('syntax error', async () => {
|
|
const res = await fixture.fetch('/js-syntax-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Parse failure');
|
|
});
|
|
|
|
it('runtime error', async () => {
|
|
const res = await fixture.fetch('/js-runtime-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('ReferenceError: undefinedvar is not defined');
|
|
});
|
|
});
|
|
|
|
describe('Preact', () => {
|
|
it('syntax error', async () => {
|
|
const res = await fixture.fetch('/preact-syntax-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Syntax error');
|
|
});
|
|
|
|
it('runtime error', async () => {
|
|
const res = await fixture.fetch('/preact-runtime-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Error: PreactRuntimeError');
|
|
});
|
|
});
|
|
|
|
describe('React', () => {
|
|
it('syntax error', async () => {
|
|
const res = await fixture.fetch('/react-syntax-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Syntax error');
|
|
});
|
|
|
|
it('runtime error', async () => {
|
|
const res = await fixture.fetch('/react-runtime-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Error: ReactRuntimeError');
|
|
});
|
|
});
|
|
|
|
describe('Solid', () => {
|
|
it('syntax error', async () => {
|
|
const res = await fixture.fetch('/solid-syntax-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Syntax error');
|
|
});
|
|
|
|
it('runtime error', async () => {
|
|
const res = await fixture.fetch('/solid-runtime-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Error: SolidRuntimeError');
|
|
});
|
|
});
|
|
|
|
describe('Svelte', () => {
|
|
it('syntax error', async () => {
|
|
const res = await fixture.fetch('/svelte-syntax-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Internal Error');
|
|
});
|
|
|
|
it('runtime error', async () => {
|
|
const res = await fixture.fetch('/svelte-runtime-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.include('Error: SvelteRuntimeError');
|
|
});
|
|
});
|
|
|
|
describe('Vue', () => {
|
|
it('syntax error', async () => {
|
|
const res = await fixture.fetch('/vue-syntax-error');
|
|
const body = await res.text();
|
|
|
|
expect(res.status).to.equal(500);
|
|
expect(body).to.include('Parse failure');
|
|
});
|
|
|
|
it('runtime error', async () => {
|
|
const res = await fixture.fetch('/vue-runtime-error');
|
|
|
|
expect(res.status).to.equal(500);
|
|
|
|
const body = await res.text();
|
|
|
|
expect(body).to.match(/Cannot read.*undefined/); // note: error differs slightly between Node versions
|
|
});
|
|
});
|
|
});
|