Как получить доступ к свойству @Input в модульном тесте angular

Я пишу шуточные модульные тесты для простого углового компонента, у которого есть свойство @Input.

Вот мой компонент

import { Component, OnInit, Input } from '@angular/core';

@Component({
  selector: 'app-title',
  template: '<h2 id="title" class="title">{{title}}</h2>',
  styleUrls: ['./title.component.scss'],
})
export class TitleComponent implements OnInit {

  @Input() title;
  constructor() { }

  ngOnInit() {
  }

}

Мой модульный тестовый файл

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

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
      ],
      declarations: [TitleComponent]
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(TitleComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });

  it('should show TEST INPUT', () => {
    component.title = 'test title';
    fixture.detectChanges();
    const input = fixture.nativeElement.querySelector('h2').innerText;

    console.log(input);
    expect(input).toEqual('test title');
  });
});

console.log(input) всегда не определен, и мой тестовый пример не работает. Что я здесь делаю не так?????


person Prasad Parab    schedule 24.06.2020    source источник


Ответы (1)


Это должно быть innerHTML или textContent вместо innerText. Тогда это работает.

fixture.nativeElement.querySelector('h2').innerHTML;

Причина в том, что jest использует JSDom, а в JSDom свойство innerText еще не реализовано. реализация внутреннего текста #1245

person kai    schedule 24.06.2020