aboutsummaryrefslogtreecommitdiff
path: root/packages/integrations/node/test/errors.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/node/test/errors.test.js')
-rw-r--r--packages/integrations/node/test/errors.test.js30
1 files changed, 28 insertions, 2 deletions
diff --git a/packages/integrations/node/test/errors.test.js b/packages/integrations/node/test/errors.test.js
index 95bb1be85..1e435ddd7 100644
--- a/packages/integrations/node/test/errors.test.js
+++ b/packages/integrations/node/test/errors.test.js
@@ -1,11 +1,16 @@
+import { spawn } from 'node:child_process';
+import { Worker } from 'node:worker_threads';
import assert from 'node:assert/strict';
import { after, before, describe, it } from 'node:test';
import * as cheerio from 'cheerio';
import nodejs from '../dist/index.js';
import { loadFixture } from './test-utils.js';
+import { fileURLToPath } from 'node:url';
describe('Errors', () => {
+ /** @type {import('./test-utils.js').Fixture} */
let fixture;
+
before(async () => {
fixture = await loadFixture({
root: './fixtures/errors/',
@@ -17,10 +22,31 @@ describe('Errors', () => {
let devPreview;
before(async () => {
- devPreview = await fixture.preview();
+ // The two tests that need the server to run are skipped
+ // devPreview = await fixture.preview();
});
after(async () => {
- await devPreview.stop();
+ await devPreview?.stop();
+ });
+
+ it('stays alive after offshoot promise rejections', async () => {
+ // this test needs to happen in a worker because node test runner adds a listener for unhandled rejections in the main thread
+ const worker = new Worker('./test/fixtures/errors/dist/server/entry.mjs', {
+ type: 'module',
+ env: { ASTRO_NODE_LOGGING: 'enabled' }
+ });
+
+ await new Promise((resolve, reject) => {
+ worker.stdout.on('data', data => {
+ setTimeout(() => reject("Server took too long to start"), 1000);
+ if (data.toString().includes('Server listening on http://localhost:4321')) resolve();
+ });
+ });
+
+ await fetch("http://localhost:4321/offshoot-promise-rejection");
+
+ // if there was a crash, it becomes an error here
+ await worker.terminate();
});
it(