jest.mock('app/core/auth/account.service'); import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { Router } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; import { of, Subject } from 'rxjs'; import { AccountService } from 'app/core/auth/account.service'; import { Account } from 'app/core/auth/account.model'; import HomeComponent from './home.component'; describe('Home Component', () => { let comp: HomeComponent; let fixture: ComponentFixture; let mockAccountService: AccountService; let mockRouter: Router; const account: Account = { activated: true, authorities: [], email: '', firstName: null, langKey: '', lastName: null, login: 'login', imageUrl: null, }; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [HomeComponent, RouterTestingModule.withRoutes([])], providers: [AccountService], }) .overrideTemplate(HomeComponent, '') .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(HomeComponent); comp = fixture.componentInstance; mockAccountService = TestBed.inject(AccountService); mockAccountService.identity = jest.fn(() => of(null)); mockAccountService.getAuthenticationState = jest.fn(() => of(null)); mockRouter = TestBed.inject(Router); jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); }); describe('ngOnInit', () => { it('Should synchronize account variable with current account', () => { // GIVEN const authenticationState = new Subject(); mockAccountService.getAuthenticationState = jest.fn(() => authenticationState.asObservable()); // WHEN comp.ngOnInit(); // THEN expect(comp.account).toBeNull(); // WHEN authenticationState.next(account); // THEN expect(comp.account).toEqual(account); // WHEN authenticationState.next(null); // THEN expect(comp.account).toBeNull(); }); }); describe('login', () => { it('Should navigate to /login on login', () => { // WHEN comp.login(); // THEN expect(mockRouter.navigate).toHaveBeenCalledWith(['/login']); }); }); describe('ngOnDestroy', () => { it('Should destroy authentication state subscription on component destroy', () => { // GIVEN const authenticationState = new Subject(); mockAccountService.getAuthenticationState = jest.fn(() => authenticationState.asObservable()); // WHEN comp.ngOnInit(); // THEN expect(comp.account).toBeNull(); // WHEN authenticationState.next(account); // THEN expect(comp.account).toEqual(account); // WHEN comp.ngOnDestroy(); authenticationState.next(null); // THEN expect(comp.account).toEqual(account); }); }); });