0Pricing
Angular Academy · Lezione

TestBed e fixture dei componenti

Configurare e creare componenti nei test

TestBed e fixture dei componenti è una lezione Angular Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Angular Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Angular Academy include 4 lezioni in totale.

Perché esiste TestBed

I componenti Angular dipendono dal framework: dependency injection, change detection e compilatore dei template. Per testarli in isolamento serve un piccolo ambiente Angular. TestBed è la principale utility di test di Angular e crea questo ambiente per ogni test.

Configura un NgModule temporaneo, compila il componente e fornisce un riferimento per interagirvi.

configureTestingModule

TestBed.configureTestingModule() dichiara ciò di cui il test ha bisogno: il componente da testare, i suoi provider e gli eventuali import. Per i componenti standalone, inserisca il componente stesso in imports.

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

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

Creare un ComponentFixture

TestBed.createComponent(CounterComponent) restituisce un ComponentFixture. Il fixture è il Suo telecomando: racchiude l'istanza del componente, il suo elemento DOM nativo e il meccanismo di change detection.

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

let fixture: ComponentFixture<CounterComponent>;

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

Accedere all'istanza del componente

fixture.componentInstance è l'istanza effettiva della classe. Può chiamarne direttamente i metodi e leggerne le proprietà, proprio come farebbe con un normale TypeScript.

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

detectChanges attiva il rendering

Un fixture appena creato NON è ancora stato renderizzato. Chiami fixture.detectChanges() per eseguire la change detection e il metodo ngOnInit, associando i dati al DOM.

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 e debugElement

fixture.nativeElement è il nodo DOM grezzo (un HTMLElement). fixture.debugElement è il wrapper più ricco di Angular, che consente di eseguire query per direttiva, leggere i servizi iniettati e ispezionare i binding.

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

Provider nel modulo di test

Se il componente inietta servizi, li fornisca tramite providers. Può usare servizi reali o test double. Qui forniamo un servizio reale per un caso semplice.

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

compileComponents per i template esterni

Quando usa templateUrl/styleUrls non inline senza la configurazione dei test di Angular CLI, i template devono essere compilati in modo asincrono. Chiami await TestBed.compileComponents(). Con la CLI, questa operazione è generalmente automatica.

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

Un test minimo completo

Riassumendo: configurare, creare, rilevare, verificare. Questa è la struttura canonica di quasi tutti i test di componenti Angular.

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 per i servizi

Per recuperare un provider configurato, usi TestBed.inject(Token). È il sostituto moderno del metodo deprecato TestBed.get().

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

Reimpostare lo stato tra i test

TestBed reimposta automaticamente il modulo prima di ogni test, così provider e stato dei componenti non vengono condivisi accidentalmente. Per questo deve configurare l'ambiente all'interno di beforeEach invece di farlo una sola volta a livello globale.

Verifica rapida

Verifichi cosa accade subito dopo createComponent.

Riepilogo

Ha appreso i fondamenti dei test: TestBed.configureTestingModule() crea l'ambiente, createComponent() restituisce un ComponentFixture e detectChanges() esegue il rendering. Usi componentInstance per la classe, nativeElement/debugElement per il DOM e TestBed.inject() per i servizi.

Domande Frequenti

La lezione «TestBed e fixture dei componenti» è gratuita?

Sì — il testo completo di «TestBed e fixture dei componenti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Angular Academy, passa a CoddyKit PRO. Il corso Angular Academy include 4 lezioni in totale.

Cosa imparerò in «TestBed e fixture dei componenti»?

Configurare e creare componenti nei test Eserciti Angular Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Angular Academy?

Non è richiesta alcuna esperienza precedente. Angular Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «TestBed e fixture dei componenti»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Angular Academy?

Sì. Ogni lezione Angular Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. TestBed e fixture dei componenti
  2. Testare input, output e DOM
  3. Mock di servizi e dipendenze
  4. Testare signal e codice asincrono
← Torna a Angular Academy