Я пытаюсь протестировать @Input в angular 2. @Input скрыть или показать мой тег p. Я хочу протестировать эту функциональность с помощью жасмина.
вот мой компонент
import { Component,Input } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular 4';
@Input() enable:boolean
constructor() { }
}
код тестирования.
describe('@Input property ', () => {
it('will not show p tag', () => {
component.enable = false;
fixture.detectChanges();
PEl = fixture.debugElement.query(By.css('p'));
console.info(PEl.nativeElement);
expect(PEl.nativeElement.length).toEqual(0);
})
})
https://stackblitz.com/edit/angular-testing-wzxrin?file=app%2Fapp.component.spec.ts
@ Фюссель, какие условия для этого
Я проверил, что его длина - 0, но у меня он не работает
У него нет длины, он будет нулевым
он работает для скрытия .. его длина никогда не 1 или больше, чем 0, если значение true





Проверьте, имеет ли он значение null, а не длину.
component.enable = false;
fixture.detectChanges();
PEl = fixture.debugElement.query(By.css('p'));
console.info(PEl.nativeElement);
expect(PEl).toBeUndefined();
как насчет включения true
expect(PEl).not.toBeUndefined()Смотрите, ваш тест не проходит
Проверка на нуль, а не на длину
component.enable = false;
fixture.detectChanges();
PEl = fixture.debugElement.query(By.css('p'));
expect(PEl).tobeNull();
Если вы используете
*ngIf, и он false, то элемент не будет отображаться в дереве dom. Итак, вашPEl = fixture.debugElement.query(By.css('p'));ничего не возвращает ... это то, что вам нужно будет проверить в своем тесте.