0 Tage Serie
javascript / intermediate
Snippet

Unit-Testing reaktiver Formular-Validatoren bei fehlerhaften Eingaben

Benutzerdefinierte synchrone Formularvalidatoren sind reine Funktionen höherer Ordnung, die Konfigurationsparameter annehmen und eine Validierungsfunktion zurückgeben. Isolierte Unit-Tests stellen sicher, dass ungültige Eingaben präzise Fehlerobjekte erzeugen und valide Werte korrekt null zurückgeben.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { FormControl, ValidationErrors, ValidatorFn } from '@angular/forms';
export function forbiddenKeywordValidator(forbiddenWord: RegExp): ValidatorFn {
return (control: FormControl): ValidationErrors | null => {
if (!control.value || typeof control.value !== 'string') {
return null;
}
const isForbidden = forbiddenWord.test(control.value);
return isForbidden ? { forbiddenKeyword: { value: control.value } } : null;
};
}
describe('forbiddenKeywordValidator', () => {
const validator = forbiddenKeywordValidator(/admin/i);
it('should return null when control contains valid text', () => {
const control = new FormControl('johndoe');
expect(validator(control)).toBeNull();
});
it('should return a validation error object when forbidden keyword is present', () => {
const control = new FormControl('SuperAdmin123');
const result = validator(control);
expect(result).toEqual({
forbiddenKeyword: { value: 'SuperAdmin123' }
});
});
});
angular
Erklärung
1
export function forbiddenKeywordValidator(forbiddenWord: RegExp): ValidatorFn {
Definiert eine Factory-Funktion, die eine mit einem regulären Ausdruck konfigurierte ValidatorFn liefert.
2
return isForbidden ? { forbiddenKeyword: { value: control.value } } : null;
Gibt bei einem Treffer ein ValidationErrors-Objekt zurück, andernfalls null bei erfolgreicher Validierung.
3
describe('forbiddenKeywordValidator', () => {
Gruppiert Unit-Tests für die Testsuite der Validatorfunktion.
4
const control = new FormControl('SuperAdmin123');
Erstellt ein leichtgewichtiges FormControl mit Testdaten ohne vollständiges DOM-TestBed-Setup.
5
expect(result).toEqual({ forbiddenKeyword: { value: 'SuperAdmin123' } });
Überprüft, ob der Validator bei ungültiger Eingabe die exakte erwartete Fehlerstruktur erzeugt.