5

ルーターの出力であるコンポーネントで単体テストを実行しようとしています。コンポーネントが使用するルーターとサービスをスタブ化し、fixture.debugElement を使用して要素をプルして、テストが機能していることを確認しようとしています。ただし、これは常に NULL として返されます。

テスト

import { TestBed, async, ComponentFixture } from '@angular/core/testing';
import { Router } from '@angular/router';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';

import { HeroesComponent } from './heroes.component';
import { HeroService } from '../hero.service';
import { StubHeroService } from '../testing/stub-hero.service';
import { StubRouter } from '../testing/stub-router';

let comp:    HeroesComponent;
let fixture: ComponentFixture<HeroesComponent>;
let de:      DebugElement;
let el:      HTMLElement;

describe('Component: Heroes', () => {

  beforeEach( async(() => {
    TestBed.configureTestingModule({
      declarations: [HeroesComponent],
      providers: [
        { provide: HeroService, useClass: StubHeroService },
        { provide: Router,      useClass: StubRouter }
      ]
    })
      .compileComponents()
      .then(() => {
        fixture = TestBed.createComponent(HeroesComponent);
        comp = fixture.componentInstance;
        de = fixture.debugElement.query(By.css('*'));
        console.log(de);
        el = de.nativeElement;
      });
  }));

  it('should create an instance', () => {
    expect(comp).toBeTruthy();
  });

  it('should update the selected hero', () => {
    comp.onSelect({
      id: 0,
      name: 'Zero'
    });
    fixture.detectChanges();

    expect(el.querySelector('.selected').firstChild.textContent).toEqual(0);
  });
});

スタブ ルーター

export class StubRouter {
  navigateByUrl(url: string) { return url; }
}
4

1 に答える 1