После некоторого тестирования я нашел ответ (по крайней мере, для своего кода) и надеюсь, что это также полезно для вас:
Когда я смотрел на DOM, когда приложение работает, я заметилчто значение по умолчанию для mat-select находится внутри этой структуры DOM:
<mat-select>
<div class="mat-select-trigger">
<div class="mat-select-value">
<span class="something">
<span class="something">
The value is here!
Но в моем случае в моем файле .ts был конструктор форм, и он использовался в ngOnInit()
.Кажется, что нормальный TestBed.createComponent(MyComponent)
не вызывает ngOnInit()
.Поэтому я должен был сделать это, чтобы получить значение.В противном случае был только заполнитель span
.
Итак, мой окончательный код выглядит следующим образом:
it('should validate the drop down value if it is set by default', async () => {
const matSelectValueObject: HTMLElement = fixture.debugElement.query(By.css('.mat-select-value')).nativeElement;
component.ngOnInit();
fixture.detectChanges();
const innerSpan = matSelectValueObject.children[0].children[0]; // for getting the inner span
expect(innerSpan.innerHTML).toEqual(3); // or '3', I did not test that
});
Кстати, я использую Angular 7, на случай, если это имеет значение.