presidential-innovation-fellows/code-gov-web

View on GitHub
src/app/components/search-results/search-results.component.spec.ts

Summary

Maintainability
A
35 mins
Test Coverage
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { APP_BASE_HREF } from '@angular/common';
import { HttpModule } from '@angular/http';
import { ReactiveFormsModule } from '@angular/forms';
import { ActivatedRoute, RouterModule } from '@angular/router';
import { TestBed, ComponentFixture, inject } from '@angular/core/testing';
import { Observable } from 'rxjs/Observable';

import { ClientService } from '../../services/client';
import { PluralizePipe } from '../../pipes/pluralize';
import { SearchResultsComponent } from './search-results.component';
import { StateService } from '../../services/state';
import { MobileService } from '../../services/mobile';

class MockRouter {
  url: string;
  constructor() {
    this.url = '/search?q=test';
  }

  navigateByUrl() {
    return true;
  }
}

class MockActivatedRoute extends ActivatedRoute {
  constructor() {
    super();
    this.queryParams = Observable.of({ q: 'test '});
  }
}

describe('SearchResultsComponent', () => {
  let fixture: ComponentFixture<SearchResultsComponent>;
  let component: SearchResultsComponent;

  beforeEach(() => {
    TestBed.resetTestingModule();
    TestBed.configureTestingModule({
      imports: [
        ReactiveFormsModule,
        RouterModule.forRoot([]),
        HttpModule,
      ],
      declarations: [
        PluralizePipe,
        SearchResultsComponent,
      ],
      providers: [
        ClientService,
        StateService,
        { provide: APP_BASE_HREF, useValue: '/' },
        { provide: ActivatedRoute, useClass: MockActivatedRoute },
      ],
      schemas: [
        CUSTOM_ELEMENTS_SCHEMA,
      ],
    });

    fixture = TestBed.createComponent(SearchResultsComponent);
    component = fixture.componentInstance;
  });

  describe('component logic', () => {
    it('should have defined SearchResultsComponent instance', () => {
      fixture.detectChanges();
      expect(component).toBeDefined();
    });
  });

  describe('component template', () => {
    it('should have an element with search-results-content as a class', () => {
      fixture.detectChanges();
      let searchResultsContainer = fixture.nativeElement.querySelector('.search-results-content');

      expect(searchResultsContainer).toBeDefined();
    });
  });
});