Я использую Angular v4.4.4. В компоненте после нажатия кнопки в шаблоне форма сохраняется, если действительная форма действительна. Что-то вроде (псевдокод):
public onSave(): void {
if (this.myForm.valid) {
this._createFoo();
}
}
private _createFoo(): void {
this._fooService.createItem(this.foo).subscribe(result => {
// stuff happens...
});
}
В соответствующем unit test мне нужно заставить форму быть действительной, чтобы я мог подтвердить, что служба вызывается. Что-то вроде этого:
it('should create Foo', () => {
const spy = spyOn(_fooService, 'createItem').and.callThrough();
component.foo = new Foo();
fixture.detectChanges();
const bookButton = fixture.debugElement.query(By.css('#bookButton'));
expect(bookButton !== null).toBeTruthy('missing Book button');
bookButton.triggerEventHandler('click', null);
expect(spy).toHaveBeenCalled();
});
Это не удастся, потому что myForm никогда не устанавливается как действительный.
В этом конкретном случае я не хочу давать каждому вводу в форме значение. Мне просто нужно посмотреть и посмотреть, происходит ли подписка на услугу. Как заставить форму быть действительной?