Heim > Artikel > Web-Frontend > 4 Tipps zum Schreiben von Angular-Unit-Tests, schauen Sie vorbei!
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(); });
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();
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(); })
Testidee:# code @Directive({ selector: '[ImageURlError]' }) export class ImageUrlErrorDirective implements OnChanges { constructor(private el: ElementRef) {} @HostListener('error') public error() { this.el.nativeElement.style.display = 'none'; } }Wie testen?
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!