Модульные тесты angular 2 не могут найти debugElement

Я пытаюсь запустить модульные тесты на своем компоненте, который является выходом для моего маршрутизатора. Я заглушил маршрутизатор и службу, используемую компонентом, и пытаюсь извлечь элемент с помощью 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; }
}

person Paul Mooney    schedule 19.10.2016    source источник
comment
Что такое ноль? de?   -  person Paul Samsotha    schedule 19.10.2016
comment
Да, de равно NULL   -  person Paul Mooney    schedule 20.10.2016
comment
Является ли ваш компонент стабильным до того, как вы запустите свой запрос? Попробуйте запустить приспособление.isStable() и опубликуйте результат.   -  person pe8ter    schedule 21.10.2016


Ответы (1)


Перед запросом вызова элемента fixture.detectChanges

fixture = TestBed.createComponent(HeroesComponent);
comp = fixture.componentInstance;

//call detect changes here
fixture.detectChanges();

de = fixture.debugElement.query(By.css('*'));
console.log(de);
el = de.nativeElement;
person Nilmi Nawalage    schedule 15.02.2018