Skip to content

Commit b09ca39

Browse files
committed
add integration test
1 parent 16fa689 commit b09ca39

4 files changed

Lines changed: 129 additions & 0 deletions

File tree

dev-packages/node-integration-tests/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"@prisma/client": "6.15.0",
4141
"@sentry/aws-serverless": "10.43.0",
4242
"@sentry/core": "10.43.0",
43+
"@sentry/hono": "10.43.0",
4344
"@sentry/node": "10.43.0",
4445
"@types/mongodb": "^3.6.20",
4546
"@types/mysql": "^2.15.21",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Sentry is initialized by the @sentry/hono/node middleware in scenario.mjs
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { serve } from '@hono/node-server';
2+
import { sentry } from '@sentry/hono/node';
3+
import { loggingTransport, sendPortToRunner } from '@sentry-internal/node-integration-tests';
4+
import { Hono } from 'hono';
5+
6+
const app = new Hono();
7+
8+
app.use(
9+
sentry(app, {
10+
dsn: 'https://public@dsn.ingest.sentry.io/1337',
11+
tracesSampleRate: 1.0,
12+
transport: loggingTransport,
13+
}),
14+
);
15+
16+
app.get('/', c => {
17+
return c.text('Hello from Hono on Node!');
18+
});
19+
20+
app.get('/hello/:name', c => {
21+
const name = c.req.param('name');
22+
return c.text(`Hello, ${name}!`);
23+
});
24+
25+
app.get('/error/:param', () => {
26+
throw new Error('Test error from Hono app');
27+
});
28+
29+
serve({ fetch: app.fetch, port: 0 }, info => {
30+
sendPortToRunner(info.port);
31+
});
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import { afterAll, describe, expect } from 'vitest';
2+
import { cleanupChildProcesses, createEsmAndCjsTests } from '../../utils/runner';
3+
4+
describe('hono-sdk (Node)', () => {
5+
afterAll(() => {
6+
cleanupChildProcesses();
7+
});
8+
9+
createEsmAndCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => {
10+
test('creates a transaction for a basic GET request', async () => {
11+
const runner = createRunner()
12+
.expect({
13+
transaction: {
14+
transaction: 'GET /',
15+
contexts: {
16+
trace: {
17+
op: 'http.server',
18+
status: 'ok',
19+
},
20+
},
21+
},
22+
})
23+
.start();
24+
runner.makeRequest('get', '/');
25+
await runner.completed();
26+
});
27+
28+
test('creates a transaction with a parametrized route name', async () => {
29+
const runner = createRunner()
30+
.expect({
31+
transaction: {
32+
transaction: 'GET /hello/:name',
33+
transaction_info: {
34+
source: 'route',
35+
},
36+
contexts: {
37+
trace: {
38+
op: 'http.server',
39+
status: 'ok',
40+
},
41+
},
42+
},
43+
})
44+
.start();
45+
runner.makeRequest('get', '/hello/world');
46+
await runner.completed();
47+
});
48+
49+
test('captures an error with the correct mechanism', async () => {
50+
const runner = createRunner()
51+
.ignore('transaction')
52+
.expect({
53+
event: {
54+
exception: {
55+
values: [
56+
{
57+
type: 'Error',
58+
value: 'Test error from Hono app',
59+
mechanism: {
60+
type: 'auto.faas.hono.error_handler',
61+
handled: false,
62+
},
63+
},
64+
],
65+
},
66+
transaction: 'GET /error/:param',
67+
},
68+
})
69+
.start();
70+
runner.makeRequest('get', '/error/param-123', { expectError: true });
71+
await runner.completed();
72+
});
73+
74+
test('creates a transaction with internal_error status when an error occurs', async () => {
75+
const runner = createRunner()
76+
.ignore('event')
77+
.expect({
78+
transaction: {
79+
transaction: 'GET /error/:param',
80+
contexts: {
81+
trace: {
82+
op: 'http.server',
83+
status: 'internal_error',
84+
data: expect.objectContaining({
85+
'http.response.status_code': 500,
86+
}),
87+
},
88+
},
89+
},
90+
})
91+
.start();
92+
runner.makeRequest('get', '/error/param-456', { expectError: true });
93+
await runner.completed();
94+
});
95+
});
96+
});

0 commit comments

Comments
 (0)