import { ComponentFixture, TestBed, async } from '@angular/core/testing'; import { provideMockStore, MockStore } from '@ngrx/store/testing'; import { Component, Input } from '@angular/core'; import { RouterTestingModule } from '@angular/router/testing'; import { AppComponent } from './app.component'; import * as fromLogin from '../../login/store/login.reducer'; import * as loginActions from '../../login/store/login.action'; import { LoginToken } from "../../login/store/model"; describe('[Search] Container: AppComponent', () => { @Component({ selector: 'app-nav', template: '' }) class NavStubComponent { @Input() isAuthenticated: boolean; @Input() loginToken: LoginToken; } let component: AppComponent; let fixture: ComponentFixture<AppComponent>; let store: MockStore; const initialState = { login: { ...fromLogin.initialState } }; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [RouterTestingModule], declarations: [ AppComponent, NavStubComponent ], providers: [ provideMockStore({ initialState }) ] }); fixture = TestBed.createComponent(AppComponent); component = fixture.componentInstance; store = TestBed.inject(MockStore); })); it('should create the component', () => { expect(component).toBeTruthy(); }); it('should execute ngOnInit lifecycle', () => { const loginLocalStorageAction = new loginActions.LoginLocalStorageAction(); const spy = spyOn(store, 'dispatch'); component.ngOnInit(); expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledWith(loginLocalStorageAction); }); it('#logout() should dispatch LogoutAction', () => { const logoutAction = new loginActions.LogoutAction(); const spy = spyOn(store, 'dispatch'); component.logout(); expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledWith(logoutAction); }); });