Skip to content

Commit

Permalink
test(express): add sse examples
Browse files Browse the repository at this point in the history
  • Loading branch information
tolgap committed Oct 4, 2022
1 parent c86f93c commit aabe832
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 0 deletions.
45 changes: 45 additions & 0 deletions integration/nest-application/sse/e2e/express.spec.ts
@@ -0,0 +1,45 @@
import {
ExpressAdapter,
NestExpressApplication,
} from '@nestjs/platform-express';
import { Test } from '@nestjs/testing';
import { expect } from 'chai';
import * as EventSource from 'eventsource';
import { ExpressModule } from '../src/express.module';

describe('Sse (Express Application)', () => {
let app: NestExpressApplication;
let eventSource: EventSource;

beforeEach(async () => {
const moduleFixture = await Test.createTestingModule({
imports: [ExpressModule],
}).compile();

app = moduleFixture.createNestApplication<NestExpressApplication>({
rawBody: true,
});

await app.listen(3000);
const url = await app.getUrl();

eventSource = new EventSource(url + '/sse');
});

afterEach(async () => {
const expressAdapter = app.getHttpAdapter() as ExpressAdapter;
await app.close();

expect(expressAdapter.openConnections).to.be.empty;
eventSource.close();
});

it('receives events from server', done => {
eventSource.addEventListener('message', event => {
expect(JSON.parse(event.data)).to.eql({
hello: 'world',
});
done();
});
});
});
12 changes: 12 additions & 0 deletions integration/nest-application/sse/src/express.controller.ts
@@ -0,0 +1,12 @@
import { Controller, MessageEvent, Sse } from '@nestjs/common';
import { interval, map, Observable } from 'rxjs';

@Controller()
export class ExpressController {
@Sse('sse')
sse(): Observable<MessageEvent> {
return interval(1000).pipe(
map(_ => ({ data: { hello: 'world' } } as MessageEvent)),
);
}
}
7 changes: 7 additions & 0 deletions integration/nest-application/sse/src/express.module.ts
@@ -0,0 +1,7 @@
import { Module } from '@nestjs/common';
import { ExpressController } from './express.controller';

@Module({
controllers: [ExpressController],
})
export class ExpressModule {}
23 changes: 23 additions & 0 deletions integration/nest-application/sse/tsconfig.json
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"lib": ["dom"],
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es6",
"sourceMap": true,
"allowJs": true,
"outDir": "./dist"
},
"include": [
"src/**/*",
"e2e/**/*"
],
"exclude": [
"node_modules"
]
}

0 comments on commit aabe832

Please sign in to comment.