2016-06-08 21 views
25

Attualmente sto mettendo insieme alcune best practice per testare le app Angular 2 a livello di componente.Test Angular2: Qual è la differenza tra un oggetto DebugElement e un oggetto NativeElement in ComponentFixture?

Ho visto alcuni tutorial interrogare l'oggetto NativeElement di un dispositivo per i selettori e simili, ad es.

it('should render "Hello World!" after click', async(() => { 
 
    builder.createAsync(HelloWorld).then((fixture: ComponentFixture<HelloWorld>) => { 
 
     fixture.detectChanges(); 
 
     let el = fixture.nativeElement; 
 
     el.querySelector('h1').click(); 
 
     fixture.detectChanges(); 
 
      
 
     expect(el.querySelector('h1')).toHaveText('Hello World!'); 
 
    }); 
 
}));

Tuttavia, in juliemr's Angular 2 test seed si accede al NativeElement attraverso un oggetto padre DebugElement.

it('should render "Hello World!" after click', async(() => { 
 
    builder.createAsync(HelloWorld).then((fixture: ComponentFixture<HelloWorld>) => { 
 
     fixture.detectChanges(); 
 
     let compiled = fixture.debugElement.nativeElement; 
 
     compiled.querySelector('h1').click(); 
 
     fixture.detectChanges(); 
 
      
 
     expect(compiled.querySelector('h1')).toHaveText('Hello World!'); 
 
    }); 
 
}));

Ci sono casi specifici usereste debugElement.nativeElement di un appuntamento fisso sulla sua nativeElement?

risposta

24
  • nativeElement restituisce un riferimento all'elemento DOM
  • DebugElement è una classe Angular2 che contiene tutti i tipi di riferimenti e metodi rilevanti per indagare su un elemento o un componente (Vedere la source of DebugNode and DebugElement
+0

Cheers - quindi suppongo che se non sto usando nessuno dei membri di DebugElement eccetto nativeElement è probabilmente più leggibile andare con componentFixture.nativeElement allora. – dgkane

+2

'nativeElement' ti aiuta solo quando vuoi investigare sul DOM (sono attributi, classi, ... impostati o cancellati o forse inviano eventi DOM). Quando si desidera analizzare lo stato delle parti dell'applicazione Angular2 (componenti, direttive, ...) è necessario 'DebugElement' –

2

Dai uno sguardo allo Angular discussion about this topic e al relativo PR.

Principalmente:

fixture.componentInstance == fixture.debugElement.componentInstance; 
fixture.nativeElement == fixture.debugElement.nativeElement; 
+0

Cheers, molto utile. – dgkane

Problemi correlati