summaryrefslogtreecommitdiff
path: root/packages/integrations/node/test/errors.test.js
diff options
context:
space:
mode:
authorGravatar Arsh <69170106+lilnasy@users.noreply.github.com> 2024-03-18 19:44:46 +0530
committerGravatar GitHub <noreply@github.com> 2024-03-18 19:44:46 +0530
commit29d29e8d006cc977ae11264309b8305782ee9375 (patch)
treecbdedf1b82ecf23f9a76933459e3f073818c2c80 /packages/integrations/node/test/errors.test.js
parenta3a575758c57418473626f4df6dc6318e96bef8a (diff)
downloadastro-29d29e8d006cc977ae11264309b8305782ee9375.tar.gz
astro-29d29e8d006cc977ae11264309b8305782ee9375.tar.zst
astro-29d29e8d006cc977ae11264309b8305782ee9375.zip
fix(node): handle offshoot promise rejections (#10454)
* fix(node): handle offshoot promise rejections * add test * add changeset * Update packages/integrations/node/test/errors.test.js
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(