Testideen:
Der Schwierigkeitsgrad des Tests nimmt ebenfalls allmählich zu und je länger er dauert. Wenn Sie das Testen vereinfachen möchten, sollten Sie während der Entwicklung Ihre Ideen bewusst klären und Code schreiben, der einfach und effizient ist ~.
Der in diesem Artikel verwendete Testtechnologie-Stack: Angular12 + Jasmine. Obwohl die Syntax anderer Testtechnologien unterschiedlich ist, ist die Gesamtidee ähnlich. [Verwandte Tutorial-Empfehlung: „Angular-Tutorial“]
Tipps: Jasmine-Testfallbestimmung, welche Methoden gibt es, Sie finden sie hier, klicken Sie auf die Komponente in meinem
Test Angular mit der folgenden Syntax
beforeEach(() => { Fixture = TestBed.createComponent(BannerComponent); Komponente = Fixture.ComponentInstance; Fixture.detectChanges(); });
1. Funktionsaufruf ohne Rückgabewert
function test(index:number,fn:Function){ if(fn){ fn(index); } }
Wie teste ich?
Gegenbeispiel: Direktes Testen des Rückgabewerts undefiniert
const res = Component.test(1,() => {})); erwarten(res).tobeUndefiniert();
Empfohlene Vorgehensweise:
# Jasmine verwenden it('sollte beim Aufruf von test korrekte Daten erhalten',() =>{ const param = { fn: () => {} } spyOn(param,'fn') Komponente.test(1,param.fn); erwarten(param.fn).toHaveBeenCalled(); })
#
-Codes anzuzeigen
@Directive({ selector: '[ImageURlError]' }) Die Exportklasse ImageUrlErrorDirective implementiert OnChanges { Konstruktor(private el: ElementRef) {} @HostListener('Fehler') öffentlicher Fehler() { this.el.nativeElement.style.display = 'none'; } }
Wie teste ich?
Das Bild wird erst ausgelöstTestidee:
,
. Fügen Sie eine benutzerdefinierte Komponente hinzu und fügen Sie die benutzerdefinierte Anweisung @Component({ Vorlage: `<div> <image src="https://xxx.ss.png" ImageURlError></image> </div>` }) Klasse TestHostComponent { } #2. Instanziieren Sie die benutzerdefinierte Komponentenansicht und lösen Sie errorEvent aus beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ Erklärungen: [ TestHostComponent, ImageURlError ] }); })); beforeEach(() => { Fixture = TestBed.createComponent(TestHostComponent); Komponente = Fixture.ComponentInstance; Fixture.detectChanges(); }); it('sollte nur Zahlen zulassen', () => { const event = new ErrorEvent('error', {} as any); const image = Fixture.debugElement.query(By.directive(ImageURlError));image.nativeElement.dispatchEvent(event); //Versenden Sie einfach das Ereignis und die error()
Methode wird zu diesem Zeitpunkt ausgeführt})
; .ts kann darauf zugreifen; private, geschützte Änderungen sind jedoch nicht zulässig.
,
Das Auslösen des Klickereignisses kann den direkten Aufruf von js durch Klicken oder die Nachahmung der Maus zum Auslösen des Klickereignisses umfassen.
#xx.component.ts @Komponente({ selecotr: 'dashboard-hero-list' }) Klasse DashBoardHeroComponent { öffentliche Karten = [{ klicken: () => { ..... } }] } #html <dashboard-hero-list [cards]="cards" class="card"> </dashboard-hero-list>`
Wie teste ich?
Testidee:
(„sollte beim Aufruf von Click korrekte Daten erhalten“, () => { const Cards = Component.cards; Karten?.forEach(card => { if(card.click){ card.click(new Event('click')); } }); erwarten(karten?.länge).toBe(1); });
Weitere Ideen für Klickreferenzen:
Idee 1:
Idee 2:
Testen Sie die Komponente direkt, ohne Host zu verwenden
, und verwenden Sie dann Fixture.nativeElement.querySelector('.card'), um das gebundene Click-Element zu finden.
use triggerEventHandler('click');