|
1 | | -import { describe, it, expect } from 'bun:test' |
| 1 | +import { describe, expect, it } from 'bun:test' |
2 | 2 | import { req } from '../utils' |
3 | 3 |
|
4 | 4 | import { Elysia, sse } from '../../src' |
@@ -560,4 +560,39 @@ describe('Stream', () => { |
560 | 560 | expect(result).toEqual(['Elysia', 'Eden'].map((x) => `data: ${x}\n\n`)) |
561 | 561 | expect(response.headers.get('content-type')).toBe('text/event-stream') |
562 | 562 | }) |
| 563 | + |
| 564 | + it('handle sse with plugin global hooks and trace', async () => { |
| 565 | + const PluginA = () => |
| 566 | + new Elysia({ name: 'PluginA' }) |
| 567 | + .onBeforeHandle(() => {}) |
| 568 | + .onAfterHandle(() => {}) |
| 569 | + .onParse(() => {}) |
| 570 | + .onTransform(() => {}) |
| 571 | + .onError(() => {}) |
| 572 | + .onAfterResponse(() => {}) |
| 573 | + .onStart(() => {}) |
| 574 | + .onStop(() => {}) |
| 575 | + .onRequest(() => {}) |
| 576 | + .trace(() => {}) |
| 577 | + .as('global') |
| 578 | + |
| 579 | + const app = new Elysia().use(PluginA()).get('/sse', async function* () { |
| 580 | + yield sse({ event: 'message', data: { meow: '1' } }) |
| 581 | + yield sse({ event: 'message', data: { meow: '2' } }) |
| 582 | + yield sse({ event: 'message', data: { meow: '3' } }) |
| 583 | + }) |
| 584 | + |
| 585 | + const response = await app.handle(req('/sse')) |
| 586 | + expect(response.headers.get('content-type')).toBe('text/event-stream') |
| 587 | + |
| 588 | + const result = [] |
| 589 | + |
| 590 | + for await (const chunk of streamResponse(response)) result.push(chunk) |
| 591 | + expect(result).toHaveLength(3) |
| 592 | + expect(result).toEqual([ |
| 593 | + 'event: message\ndata: {"meow":"1"}\n\n', |
| 594 | + 'event: message\ndata: {"meow":"2"}\n\n', |
| 595 | + 'event: message\ndata: {"meow":"3"}\n\n' |
| 596 | + ]) |
| 597 | + }) |
563 | 598 | }) |
0 commit comments