Я новичок в Angular. Я создал компонент, который отображает кнопки, используя * ngFor.
ts файл:
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'display-button',
templateUrl: './display-button.component.html',
styleUrls: ['./display-button.component.scss']
})
export class DisplayButtonComponent implements OnInit {
@Input() compInput: any;
buttons: any;
constructor() { }
ngOnInit() {
if (this.compInput) {
this.buttons = this.compInput.scriptButtonData.buttons;
}
}
buttonClicked(selectedValue) {
//do something
}
}
}
html файл:
<button class="scriptButton" *ngFor="let button of buttons" (click)="buttonClicked(button.value)" >{{button.name}}</button>
spe c .ts файл:
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { InlineScriptButtonComponent } from './display-button.component';
import {By} from '@angular/platform-browser';
describe('DisplayButtonComponent', () => {
let component: DisplayButtonComponent;
let fixture: ComponentFixture<DisplayButtonComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DisplayButtonComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DisplayButtonComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
fit('should contain label', () => {
component.compInput= {
scriptButtonData: {
type: "scriptButton",
buttons: [
{
name: "Proceed",
value: "Yes"
},
{
name: "Cancel",
value: "No"
},
]
},
someOtherProperty: null,
};
fixture.detectChanges();
let buttonLabels = fixture.debugElement.queryAll(By.css('scriptButton'));
expect( buttonLabels.length).toBe(2);
});
});
Я пишу юнит-тесты, чтобы проверить, отображаются ли 2 кнопки. Когда я запускаю тесты, он завершается неудачно, потому что buttonLabels.length равен 0. Даже если я инициализирую входную переменную compInput в тесте, кажется, что он нулевой, когда он встречает строку
if (this.compInput) {
Почему это значение NULL? Что я делаю неправильно? Кроме того, способ обмана - инициализация теста следующим образом:
component.buttons = [
{
name: "Proceed",
value: "Yes"
},
{
name: "Cancel",
value: "No"
},
]
Несмотря на то, что тест проходит с добавлением вышеуказанной строки, это обман, так как я не проверяю код в функции ngOnInit.
Почему значения, которые я устанавливаю для component.compInput, недоступны для теста. Как правильно проверить эту функциональность?