import { ComponentFixture, TestBed } from '@angular/core/testing'; import { RouterModule } from '@angular/router'; import { AppComponent } from './app.component'; import { EUI_LAYOUT } from '@eui/components/layout'; import { routes } from './app.routes'; import { provideHttpClientTesting } from '@angular/common/http/testing'; import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { AppStarterService } from './app-starter.service'; import { CONFIG_TOKEN, I18nService, I18nState, UserService} from '@eui/core'; import { EuiAppConfig } from '@eui/core'; import { Observable, of } from 'rxjs'; import { TranslateModule } from '@ngx-translate/core'; import { describe, it, beforeEach, expect, vi } from 'vitest'; // eslint-disable-next-line type SpyObj = { [K in keyof T]: T[K] extends (...args: any[]) => any ? ReturnType : T[K] }; describe('AppComponent', () => { let component: AppComponent; let fixture: ComponentFixture; let userServiceMock: SpyObj; let i18nServiceMock: SpyObj; let configMock: EuiAppConfig; beforeEach(async () => { type GetStateReturnType = T extends keyof I18nState ? Observable : Observable; userServiceMock = { init: vi.fn() } as SpyObj; i18nServiceMock = { init: vi.fn(), getState: vi.fn((key?: K): GetStateReturnType => { if (typeof key === 'string') { return of({ activeLang: 'en' }[key]) as GetStateReturnType; } return of({ activeLang: 'en' }) as GetStateReturnType; }) } as SpyObj; configMock = {global: {}, modules: {core: {base: 'localhost:3000', userDetails: 'dummy'}}}; await TestBed.configureTestingModule({ imports: [ RouterModule.forRoot(routes), ...EUI_LAYOUT, TranslateModule.forRoot(), ], providers: [ provideHttpClient(withInterceptorsFromDi()), provideHttpClientTesting(), AppStarterService, {provide: UserService, useValue: userServiceMock}, {provide: I18nService, useValue: i18nServiceMock}, {provide: CONFIG_TOKEN, useValue: configMock}, ], }).compileComponents(); fixture = TestBed.createComponent(AppComponent); component = fixture.componentInstance; }); it('should create the app', () => { expect(component).toBeTruthy(); }); });