Czesc. Z racji tego ze jestem raczej slabiutki ze wszystkim co zwiazane z JS prosilbym o wyjasnienie kilku rzeczy zwiazanych z testowaniem w angularze.
Powiedzmy ze mamy taki kod:
export function isEmailUnique(api: SignUpApi): AsyncValidatorFn {
return (control: AbstractControl) =>
timer(1500).pipe(switchMap(() => {
return api.isEmailUnique(control.value)
.pipe(
map(response => {
return response === true ? { emailNotUnique: true } : null;
}))
}))
}
No i chialbym sobie go grzecznie przetestowac. Wiec zaczalem od takich wygibasow.
describe('email uniqueness validator', () => {
let api: SignUpApi;
let form: FormGroup;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientModule],
providers: [SignUpApi]
})
api = TestBed.get(SignUpApi);
form = new FormGroup({
test: new FormControl(undefined, [], [isEmailUnique(api)])
});
});
it('should set an error on form of type emailNotUnique', (done) => {
spyOn(api, 'isEmailUnique').and.returnValue(of(true));
form.get('test').setValue('email');
form.updateValueAndValidity();
///tutaj zaczynaja sie wygibasy..
timer(5000)
.subscribe(() => {
if (form.status !== 'PENDING') {
expect(form.get('test').hasError('emailNotUnique')).toBeTruthy();
done();
}
})
})
})
No i widze ze formularz ma status pending wiec w normalnym ukladzie mam swiadomosc ze czeka na odpowiedz z backendu tylko ze tutaj nie mam backendu wiec stwierdzilem ze dodam sobie "spaja" i zmockuje sobie odpowiedz. No wlasnie tylko cos nie dziala. Prawdopdobnie brakuje mi jakis podstaw i sam test powinien wygladac zgola inaczej a google cos slabo mi podpowiada. Spojrzy ktos na to w wolnej chwili ?