0Pricing
Angular Academy · Lektion

TestBed und Component Fixtures

Komponenten in Tests konfigurieren und erstellen

TestBed und Component Fixtures ist eine kostenlose Angular Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Angular Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Angular Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum es TestBed gibt

Angular-Komponenten hängen vom Framework ab: von Dependency Injection, Change Detection und dem Template-Compiler. Um sie isoliert zu testen, benötigen Sie eine kleine Angular-Umgebung. TestBed ist Angulars wichtigstes Testwerkzeug, das diese Umgebung für jeden Test erstellt.

Es konfiguriert ein temporäres NgModule, kompiliert Ihre Komponente und gibt Ihnen eine Referenz, über die Sie mit ihr interagieren können.

configureTestingModule

TestBed.configureTestingModule() legt fest, was Ihr Test benötigt: die zu testende Komponente, ihre Provider und alle Imports. Bei Standalone-Komponenten fügen Sie die Komponente selbst in imports ein.

import { TestBed } from '@angular/core/testing';
import { CounterComponent } from './counter.component';

beforeEach(() => {
  TestBed.configureTestingModule({
    imports: [CounterComponent],
  });
});

Eine ComponentFixture erstellen

TestBed.createComponent(CounterComponent) gibt eine ComponentFixture zurück. Die Fixture ist Ihre Fernbedienung: Sie kapselt die Komponenteninstanz, ihr natives DOM-Element und die Change-Detection-Mechanismen.

import { ComponentFixture, TestBed } from '@angular/core/testing';

let fixture: ComponentFixture<CounterComponent>;

beforeEach(() => {
  fixture = TestBed.createComponent(CounterComponent);
});

Auf die Komponenteninstanz zugreifen

fixture.componentInstance ist die tatsächliche Klasseninstanz. Sie können ihre Methoden aufrufen und ihre Eigenschaften direkt lesen, genau wie bei normalem TypeScript.

it('creates the component', () => {
  const fixture = TestBed.createComponent(CounterComponent);
  const component = fixture.componentInstance;
  expect(component).toBeTruthy();
  expect(component.count).toBe(0);
});

detectChanges löst das Rendern aus

Eine frisch erstellte Fixture wurde noch NICHT gerendert. Rufen Sie fixture.detectChanges() auf, um die Change Detection und das ngOnInit der Komponente auszuführen und Daten über Bindings ins DOM zu übertragen.

it('renders initial value', () => {
  const fixture = TestBed.createComponent(CounterComponent);
  fixture.detectChanges(); // now bindings are applied
  const el = fixture.nativeElement as HTMLElement;
  expect(el.textContent).toContain('0');
});

nativeElement im Vergleich zu debugElement

fixture.nativeElement ist der unveränderte DOM-Knoten (ein HTMLElement). fixture.debugElement ist Angulars erweiterter Wrapper, mit dem Sie nach Direktiven suchen, injizierte Services auslesen und Bindings untersuchen können.

const native = fixture.nativeElement;       // HTMLElement
const debug = fixture.debugElement;         // DebugElement
console.log(debug.componentInstance === fixture.componentInstance); // true

Provider im Testmodul

Wenn die Komponente Services injiziert, stellen Sie diese über providers bereit. Sie können echte Services oder Test-Doubles verwenden. Hier stellen wir für einen einfachen Fall einen echten Service bereit.

TestBed.configureTestingModule({
  imports: [CounterComponent],
  providers: [
    { provide: LoggerService, useValue: { log: () => {} } },
  ],
});

compileComponents für externe Templates

Wenn Sie nicht eingebettete templateUrl/styleUrls ohne die Testkonfiguration der Angular CLI verwenden, müssen Templates asynchron kompiliert werden. Rufen Sie await TestBed.compileComponents() auf. Mit der CLI geschieht dies normalerweise automatisch.

beforeEach(async () => {
  await TestBed.configureTestingModule({
    imports: [ProfileComponent],
  }).compileComponents();
});

Ein vollständiger minimaler Test

Zusammengefasst: konfigurieren, erstellen, Änderungen erkennen, überprüfen. Dies ist der typische Aufbau fast jedes Angular-Komponententests.

describe('CounterComponent', () => {
  let fixture: ComponentFixture<CounterComponent>;

  beforeEach(() => {
    TestBed.configureTestingModule({ imports: [CounterComponent] });
    fixture = TestBed.createComponent(CounterComponent);
    fixture.detectChanges();
  });

  it('starts at zero', () => {
    expect(fixture.componentInstance.count).toBe(0);
  });
});

TestBed.inject für Services

Um einen konfigurierten Provider abzurufen, verwenden Sie TestBed.inject(Token). Dies ist der moderne Ersatz für das veraltete TestBed.get().

const logger = TestBed.inject(LoggerService);
expect(logger).toBeDefined();

Zwischen Tests zurücksetzen

TestBed setzt sein Modul vor jedem Test automatisch zurück, sodass Provider und Komponentenstatus nicht durchsickern. Deshalb konfigurieren Sie innerhalb von beforeEach statt einmal global.

Kurze Überprüfung

Testen Sie, was direkt nach createComponent geschieht.

Zusammenfassung

Sie haben die Grundlagen des Testens kennengelernt: TestBed.configureTestingModule() erstellt die Umgebung, createComponent() gibt eine ComponentFixture zurück und detectChanges() rendert sie. Verwenden Sie componentInstance für die Klasse, nativeElement/debugElement für das DOM und TestBed.inject() für Services.

Häufig gestellte Fragen

Ist die Lektion „TestBed und Component Fixtures“ kostenlos?

Ja — der vollständige Text von „TestBed und Component Fixtures“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Angular Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Angular Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „TestBed und Component Fixtures“?

Komponenten in Tests konfigurieren und erstellen Du übst Angular Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Angular Academy zu starten?

Keine Vorkenntnisse erforderlich. Angular Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „TestBed und Component Fixtures“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Angular Academy-Lektion Code schreiben und ausführen?

Ja. Jede Angular Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. TestBed und Component Fixtures
  2. Inputs, Outputs und DOM testen
  3. Services und Abhängigkeiten mocken
  4. Signals und asynchronen Code testen
← Zurück zu Angular Academy