Skip to content
Snippets Groups Projects
app.component.spec.ts 4.58 KiB
Newer Older
Giuseppe Digilio's avatar
Giuseppe Digilio committed
import {
  async,
Giuseppe Digilio's avatar
Giuseppe Digilio committed
  ComponentFixture,
  inject,
Giuseppe Digilio's avatar
Giuseppe Digilio committed
  TestBed
} from '@angular/core/testing';
Giuseppe Digilio's avatar
Giuseppe Digilio committed
import {
Giuseppe Digilio's avatar
Giuseppe Digilio committed
  CUSTOM_ELEMENTS_SCHEMA,
Giuseppe Digilio's avatar
Giuseppe Digilio committed
  DebugElement
William Welling's avatar
William Welling committed
} from '@angular/core';

import { CommonModule } from '@angular/common';

Giuseppe Digilio's avatar
Giuseppe Digilio committed
import { By } from '@angular/platform-browser';
William Welling's avatar
William Welling committed
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { Store, StoreModule } from '@ngrx/store';
Giuseppe Digilio's avatar
Giuseppe Digilio committed
// Load the implementations that should be tested
Giuseppe Digilio's avatar
Giuseppe Digilio committed
import { AppComponent } from './app.component';
Giuseppe Digilio's avatar
Giuseppe Digilio committed

William Welling's avatar
William Welling committed
import { HostWindowState } from './shared/host-window.reducer';
import { HostWindowResizeAction } from './shared/host-window.actions';
Giuseppe Digilio's avatar
Giuseppe Digilio committed

William Welling's avatar
William Welling committed
import { MetadataService } from './core/metadata/metadata.service';

import { GLOBAL_CONFIG, ENV_CONFIG } from '../config';
import { NativeWindowRef, NativeWindowService } from './core/services/window.service';
William Welling's avatar
William Welling committed
import { MockTranslateLoader } from './shared/mocks/mock-translate-loader';
import { MockMetadataService } from './shared/mocks/mock-metadata-service';
import { Angulartics2GoogleAnalytics } from 'angulartics2/ga';
import { AngularticsMock } from './shared/mocks/mock-angulartics.service';
Giuseppe Digilio's avatar
Giuseppe Digilio committed
import { AuthServiceMock } from './shared/mocks/mock-auth.service';
import { AuthService } from './core/auth/auth.service';
lotte's avatar
lotte committed
import { MenuService } from './shared/menu/menu.service';
import { CSSVariableService } from './shared/sass-helper/sass-helper.service';
import { CSSVariableServiceStub } from './shared/testing/css-variable-service-stub';
import { MenuServiceStub } from './shared/testing/menu-service-stub';
import { HostWindowService } from './shared/host-window.service';
import { HostWindowServiceStub } from './shared/testing/host-window-service-stub';
import { ActivatedRoute, Router } from '@angular/router';
import { RouteService } from './core/services/route.service';
import { MockActivatedRoute } from './shared/mocks/mock-active-router';
import { MockRouter } from './shared/mocks/mock-router';
import { MockCookieService } from './shared/mocks/mock-cookie.service';
lotte's avatar
lotte committed
import { CookieService } from './core/services/cookie.service';
William Welling's avatar
William Welling committed

Giuseppe Digilio's avatar
Giuseppe Digilio committed
let fixture: ComponentFixture<AppComponent>;
let de: DebugElement;
let el: HTMLElement;
lotte's avatar
lotte committed
const menuService = new MenuServiceStub();
Giuseppe Digilio's avatar
Giuseppe Digilio committed
describe('App component', () => {
Giuseppe Digilio's avatar
Giuseppe Digilio committed

Giuseppe Digilio's avatar
Giuseppe Digilio committed
  // async beforeEach
Giuseppe Digilio's avatar
Giuseppe Digilio committed
  beforeEach(async(() => {
Giuseppe Digilio's avatar
Giuseppe Digilio committed
    return TestBed.configureTestingModule({
        TranslateModule.forRoot({
          loader: {
            provide: TranslateLoader,
            useClass: MockTranslateLoader
          }
        }),
      ],
      declarations: [AppComponent], // declare the test component
Giuseppe Digilio's avatar
Giuseppe Digilio committed
      providers: [
        { provide: GLOBAL_CONFIG, useValue: ENV_CONFIG },
        { provide: NativeWindowService, useValue: new NativeWindowRef() },
William Welling's avatar
William Welling committed
        { provide: MetadataService, useValue: new MockMetadataService() },
        { provide: Angulartics2GoogleAnalytics, useValue: new AngularticsMock() },
Giuseppe Digilio's avatar
Giuseppe Digilio committed
        { provide: AuthService, useValue: new AuthServiceMock() },
        { provide: Router, useValue: new MockRouter() },
        { provide: ActivatedRoute, useValue: new MockActivatedRoute() },
lotte's avatar
lotte committed
        { provide: MenuService, useValue: menuService },
        { provide: CSSVariableService, useClass: CSSVariableServiceStub },
        { provide: HostWindowService, useValue: new HostWindowServiceStub(800) },
        { provide: CookieService, useValue: new MockCookieService()},
Giuseppe Digilio's avatar
Giuseppe Digilio committed
      ],
      schemas: [CUSTOM_ELEMENTS_SCHEMA]
Giuseppe Digilio's avatar
Giuseppe Digilio committed
    })
  }));

  // synchronous beforeEach
  beforeEach(() => {
    fixture = TestBed.createComponent(AppComponent);

    comp = fixture.componentInstance; // component test instance
William Welling's avatar
William Welling committed
    // query for the <div class='outer-wrapper'> by CSS element selector
    de = fixture.debugElement.query(By.css('div.outer-wrapper'));
Giuseppe Digilio's avatar
Giuseppe Digilio committed
    el = de.nativeElement;
Giuseppe Digilio's avatar
Giuseppe Digilio committed
  });

Giuseppe Digilio's avatar
Giuseppe Digilio committed
  it('should create component', inject([AppComponent], (app: AppComponent) => {
    // Perform test using fixture and service
Giuseppe Digilio's avatar
Giuseppe Digilio committed
    expect(app).toBeTruthy();
Giuseppe Digilio's avatar
Giuseppe Digilio committed
  }));
William Welling's avatar
William Welling committed
  describe('when the window is resized', () => {
    let width: number;
    let height: number;
    let store: Store<HostWindowState>;

    beforeEach(() => {
      store = fixture.debugElement.injector.get(Store) as Store<HostWindowState>;
      spyOn(store, 'dispatch');

      window.dispatchEvent(new Event('resize'));
      width = window.innerWidth;
      height = window.innerHeight;
    });

William Welling's avatar
William Welling committed
    it('should dispatch a HostWindowResizeAction with the width and height of the window as its payload', () => {
      expect(store.dispatch).toHaveBeenCalledWith(new HostWindowResizeAction(width, height));
    });

  });
Giuseppe Digilio's avatar
Giuseppe Digilio committed
});