Używam Angular v4.4.4. W komponencie, po kliknięciu przycisku w szablonie, formularz jest zapisywany przy założeniu, że formularz reaktywny jest ważny. Coś jak (pseudo-kod):Kątowa - Wymuszanie poprawności formy reaktywnej w teście jednostkowym
public onSave(): void {
if (this.myForm.valid) {
this._createFoo();
}
}
private _createFoo(): void {
this._fooService.createItem(this.foo).subscribe(result => {
// stuff happens...
});
}
W teście powiązanej jednostki muszę zmusić postać była ważna, więc mogę potwierdzić usługę jest nazywany. Coś takiego:
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();
});
Nie powiedzie się, ponieważ mojaForma nigdy nie jest ustawiona jako poprawna.
W tym konkretnym przypadku nie chcę, aby każde wejście w formularzu było wartością. Po prostu muszę obejrzeć i zobaczyć, czy występuje subskrypcja usługi. Jak mogę wymusić poprawność formularza?
W takim przypadku naprawdę powinieneś stworzyć test jednostkowy dla usługi i jeden dla komponentu, aby były oddzielne. Test podzespołu powinien podać poprawną wartość i sprawdzić subskrypcję, a test serwisowy powinien upewnić się, że żądanie jest przetwarzane. – FussinHussin
W tym przypadku wartość zwrócona przez usługę jest nieistotna. Szpieg właśnie potwierdza, że usługa jest wywoływana. Sama usługa jest testowana w innym miejscu. – ebakunin
Rozumiem. Czy istnieje konkretny powód, dla którego nie chcesz bezpośrednio wprowadzać wartości? po prostu zaoszczędzić czas? – FussinHussin