AngularWie führt man Unit-Tests durch? In diesem Artikel werde ich Ihnen 4 High-Level-Techniken zum Schreiben von Angular-Unit-Tests vorstellen. Ich hoffe, dass es Ihnen hilfreich sein wird!
Testideen:
Der in diesem Artikel verwendete Testtechnologie-Stack:Angular12
+Jasmine Obwohl die Syntax anderer Testtechnologien unterschiedlich ist, ist die Gesamtidee ähnlich. [Verwandte Tutorial-Empfehlungen: „Angular-Tutorial“]
Tipps: Jasmine-Testfallbestimmung, welche Methoden gibt es, Sie finden sie hier,Poke meUnit-Test
FunktionstestbeforeEach(() => { fixture = TestBed.createComponent(BannerComponent); component = fixture.componentInstance; fixture.detectChanges(); });Nach dem Login kopieren
function test(index:number ,fn:Function){ if(fn){ fn(index); } }
Wie teste ich?
Gegenbeispiel: Testen Sie direkt den Rückgabewert undefiniertEmpfohlene Vorgehensweise:const res = component.test(1,() => {})); expect(res).tobeUndefined();Nach dem Login kopieren
Strukturanweisung HostListener-Test# 利用Jasmine it('should get correct data when call test',() =>{ const param = { fn:() => {} } spyOn(param,'fn') component.test(1,param.fn); expect(param.fn).toHaveBeenCalled(); })Nach dem Login kopieren
Testidee:Wie testen?# code @Directive({ selector: '[ImageURlError]' }) export class ImageUrlErrorDirective implements OnChanges { constructor(private el: ElementRef) {} @HostListener('error') public error() { this.el.nativeElement.style.display = 'none'; } }Nach dem Login kopieren
Der Bildladefehler wird ausgelöst, dann finden Sie einen Weg, den Fehler auszulösen
#1.添加一个自定义组件, 并添加上自定义指令 @Component({ template: `<div> <image src="https://xxx.ss.png" ImageURlError></image> </div>` }) class TestHostComponent { } #2.把自定义组件视图实例化,并派发errorEvent beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TestHostComponent, ImageURlError ] }); })); beforeEach(() => { fixture = TestBed.createComponent(TestHostComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should allow numbers only', () => { const event = new ErrorEvent('error', {} as any); const image = fixture.debugElement.query(By.directive(ImageURlError)); image.nativeElement.dispatchEvent(event); //派发事件即可,此时error()方法就会被执行到 });
Wenn Sie nicht vorhaben, jede Methode zu testen, können Sie die Daten organisieren und den Eingang anrufen , und führen Sie die Methode durch Integrationstests – Schwierigkeit ***
Klickereignis testen
# xx.component.ts @Component({ selecotr: 'dashboard-hero-list' }) class DashBoardHeroComponent { public cards = [{ click: () => { ..... } }] } # html <dashboard-hero-list [cards]="cards" class="card"> </dashboard-hero-list>`
Verwenden Sie die Sammlung von Objekten, die vom Code zurückgegebene Klickereignisse enthalten, um Click nacheinander aufzurufen, sodass die Codeabdeckung verbessert wirdTesten Sie die Komponente direkt, ohne Host zu verwenden
it('should get correct data when call click',() => { const cards = component.cards; cards?.forEach(card => { if(card.click){ card.click(new Event('click')); } }); expect(cards?.length).toBe(1); });
Referenzideen für andere Klicks:
DispatchEvent für das Element auslösen, das heißt Ja,
Idee 2:
('click');
Weitere Kenntnisse zum Thema Programmierung finden Sie unter:
ProgrammiervideoDas obige ist der detaillierte Inhalt von4 Tipps zum Schreiben von Angular-Unit-Tests, schauen Sie vorbei!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!