import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
+import { APP_PROPS } from './app.tokens';
describe('AppComponent', () => {
beforeEach(async () => {
RouterTestingModule,
AppComponent
],
+ providers: [
+ { provide: APP_PROPS, useValue: {} },
+ ],
}).compileComponents();
});
import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
+import { APP_PROPS } from './app.tokens';
export const appConfig: ApplicationConfig = {
providers: [
provideHttpClient(
withInterceptorsFromDi(),
),
- provideRouter(routes)
+ provideRouter(routes),
+ { provide: APP_PROPS, useValue: { backendUri: 'http://localhost:8080/' } },
]
};
+
--- /dev/null
+import { InjectionToken } from '@angular/core';
+
+
+export interface ApplicationProperties {
+ backendUri: string;
+}
+
+export const APP_PROPS = new InjectionToken<ApplicationProperties>('configurable application properties');
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { ChatroomComponent } from './index';
+import { APP_PROPS } from '../app.tokens';
describe('ChatroomComponent', () => {
let component: ChatroomComponent;
HttpClientTestingModule,
RouterTestingModule,
],
+ providers: [
+ { provide: APP_PROPS, useValue: {} },
+ ],
})
.compileComponents();
import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { ChatroomService } from './index';
+import { APP_PROPS } from '../app.tokens';
describe('ChatroomService', () => {
let service: ChatroomService;
HttpClientTestingModule,
RouterTestingModule,
],
+ providers: [
+ { provide: APP_PROPS, useValue: {} },
+ ],
});
service = TestBed.inject(ChatroomService);
});
-import { Injectable } from '@angular/core';
+import { inject, Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { EventSourceMessage, fetchEventSource } from '@microsoft/fetch-event-source';
import { Observable, Subscriber } from 'rxjs';
import { Chatroom, Message } from './index';
+import { APP_PROPS } from '../app.tokens';
class RetriableError extends Error { }
class CanceledError extends Error { }
})
export class ChatroomService {
- private backendUri = 'http://localhost:8080/';
+ private http = inject(HttpClient);
+ private backendUri: string;
private channel: Subscriber<Message> = new Subscriber<Message>();
private uri: string = "CLOSED";
private canceled: boolean = false;
- constructor(private http: HttpClient) { }
+ constructor() {
+ const props = inject(APP_PROPS);
+ this.backendUri = props.backendUri;
+ }
getChatrooms(): Observable<Chatroom[]> {
return this.http.get<Chatroom[]>(this.backendUri + 'list');
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ChatroomsComponent } from './index';
+import { APP_PROPS } from '../app.tokens';
describe('ChatroomsComponent', () => {
let component: ChatroomsComponent;
HttpClientTestingModule,
ChatroomsComponent,
],
+ providers: [
+ { provide: APP_PROPS, useValue: {} },
+ ],
})
.compileComponents();
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ReactiveFormsModule } from '@angular/forms';
import { UserComponent } from './index';
+import { APP_PROPS } from '../app.tokens';
describe('UserComponent', () => {
let component: UserComponent;
ReactiveFormsModule,
UserComponent,
],
+ providers: [
+ { provide: APP_PROPS, useValue: {} },
+ ],
})
.compileComponents();