diff --git a/modules/socket-engine/spec/index.spec.ts b/modules/socket-engine/spec/index.spec.ts index f9e7447f1..f8d067b51 100644 --- a/modules/socket-engine/spec/index.spec.ts +++ b/modules/socket-engine/spec/index.spec.ts @@ -1,6 +1,6 @@ import { ServerModule } from '@angular/platform-server'; -import { NgModule, Component } from '@angular/core'; +import { NgModule, Component, Inject, InjectionToken } from '@angular/core'; import 'zone.js'; import { BrowserModule } from '@angular/platform-browser'; @@ -88,4 +88,28 @@ describe('test runner', () => { expect(result.error).toBeUndefined(); done(); }); + it('should be able to inject some token', async(done) => { + const SOME_TOKEN = new InjectionToken('SOME_TOKEN'); + const someValue = {message: 'value' + new Date()}; + @Component({ + selector: 'root', + template: `message:{{_someToken.message}}` + }) + class MockComponent {constructor(@Inject(SOME_TOKEN) public readonly _someToken: any) {}} + const appModule = makeTestingModule('', MockComponent); + const server = await startSocketEngine(appModule, [{provide: SOME_TOKEN, useValue: someValue}]); + + const client = net.createConnection(9090, 'localhost', () => { + const renderOptions = {id: 1, url: '/path', + document: ''} as SocketEngineRenderOptions; + client.write(JSON.stringify(renderOptions)); + }); + + client.on('data', data => { + const res = JSON.parse(data.toString()) as SocketEngineResponse; + server.close(); + expect(res.html).toContain(someValue.message); + done(); + }); + }); }); diff --git a/modules/socket-engine/src/main.ts b/modules/socket-engine/src/main.ts index 0a9faad39..3fe5d4473 100644 --- a/modules/socket-engine/src/main.ts +++ b/modules/socket-engine/src/main.ts @@ -7,7 +7,7 @@ */ import { ɵCommonEngine as CommonEngine, ɵRenderOptions as RenderOptions } from '@nguniversal/common/engine'; -import { NgModuleFactory, Type } from '@angular/core'; +import { NgModuleFactory, Type, StaticProvider } from '@angular/core'; import * as net from 'net'; export interface SocketEngineServer { @@ -26,11 +26,12 @@ export interface SocketEngineResponse { export function startSocketEngine( moduleOrFactory: Type<{}> | NgModuleFactory<{}>, + providers: StaticProvider[] = [], host = 'localhost', port = 9090 ): Promise { return new Promise((resolve, _reject) => { - const engine = new CommonEngine(moduleOrFactory); + const engine = new CommonEngine(moduleOrFactory, providers); const server = net.createServer(socket => { socket.on('data', async buff => {