AFE_exam

Q4: Angular Forms og Testing


Questions:

Run Command:

For at starte applikationen:

ng serve -o

1. Handling Forms i Angular

At håndtere brugerinput er en af de vigtigste dele af en webapplikation. Angular tilbyder to måder at håndtere forms på: template-driven forms og reactive forms.

Valget mellem de to afhænger af use-casen:


1.1 Template-driven Forms

Template-driven forms oprettes med direktiver direkte i HTML-skabelonen. Formularvalidering og datahåndtering sker også i template, og data sendes til komponentklassen ved indsendelse OnSubmit.

Nøgleelementer:

  1. NgForm: Automatisk knyttet til <form>-elementet via FormsModule.
  2. NgModel: Binder data mellem skabelonen og modellen.
  3. NgModelGroup: Grupperer relaterede kontroller.

Eksempel:

Validering og datahåndtering udføres med ngModel:

Når brugeren klikker på “Submit”, kaldes onSubmit()-metoden i komponentklassen:


2.Reactive Forms

Reactive forms bruger en model-driven tilgang, hvor formularens logik defineres i komponentklassen. De tilbyder synkron adgang til data, immutabilitet og tracking via observables.

Nøgleelementer:

  1. FormControl: Repræsenterer en individuel kontrol og dens status.
  2. FormGroup: Grupperer flere kontroller.
  3. FormBuilder: Forenkler oprettelsen af kontroller og grupper.

Eksempel:

Validering: Reactive forms giver mulighed for at bruge funktioner til validering:


3. Key Differences mellem Form Typer

Egenskab Template-driven Forms Reactive Forms
Form Model Implicit via direktiver Eksplicit i komponent
Data Model Ustruktureret og mutabel Struktureret og immutabel
Data Flow Asynkron Synkron
Validering Direktiver Funktioner

4. Testing Angular Apps

Angular tilbyder testværktøjer i @angular/core/testing. Det centrale værktøj er TestBed, som bruges til at konfigurere og teste Angular-komponenter og services.

Nøglefunktioner:

  1. TestBed.configureTestingModule():
    • Konfigurerer et testmodul, der emulerer et @NgModule.
  2. TestBed.createComponent():
    • Opretter en instans af en komponent til test.

Eksempel:

Debugging: Komponenten kan testes gennem ComponentFixture, som giver adgang til DOM-elementet og ændringsdetektering.


CI-testing med Karma og Jasmine

CI-tests kan køres ved hjælp af Karma (test runner) og Jasmine (test framework). Karma konfigureres i karma.conf.js. Karma Man kan også integrere tests via workflow actions på github: Github test flow med ci

Eksempel:

GitHub Actions Workflow: