4個Angular單元測試寫的小技巧,快來看看!
Angular怎麼進行單元測試?以下這篇給大家整理分享4個Angular單元測驗寫的高階技巧,希望對大家有幫助!
測試想法:
- #1.能單元測試,盡量單元測試優先
- #2 .不能單元測試,透過封裝一層進行測試,譬如把測試的封裝到一個組件,但又有弱於集成測試
- 3.集成測試
- #4.E2E 測試
測試難度,也是逐漸加大的,耗費的時間也是越多的。那麼想測試的簡單,那麼在開發的時候,就有意識的,去把思路理清楚,code寫的簡單高效些~。
本文所使用的測試技術堆疊:Angular12 Jasmine, 雖然其他測試技術語法不同,但整體思路差不多。 【相關教學推薦:《angular教學》】
Tips: Jasmine 測試案例判定,方法有哪些,可以在這裡找到,戳我
#單元測試
其中component,預設是Angular使用以下語法建立的待測試物件的instance
beforeEach(() => { fixture = TestBed.createComponent(BannerComponent); component = fixture.componentInstance; fixture.detectChanges(); });
函數測試
1.函數調用,且沒有返回值
function test(index:number ,fn:Function){ if(fn){ fn(index); } }
請問如何測試?
反例:直接測試回傳值undefined
const res = component.test(1,() => {})); expect(res).tobeUndefined();
建議做法:
# 利用Jasmine it('should get correct data when call test',() =>{ const param = { fn:() => {} } spyOn(param,'fn') component.test(1,param.fn); expect(param.fn).toHaveBeenCalled(); })
結構指令HostListener測試
結構指令,常用語隱藏、顯示、for迴圈展示這類功能
# code @Directive({ selector: '[ImageURlError]' }) export class ImageUrlErrorDirective implements OnChanges { constructor(private el: ElementRef) {} @HostListener('error') public error() { this.el.nativeElement.style.display = 'none'; } }
如何測試?
測試想法:
- 圖片載入錯誤,才觸發,那麼想辦法觸發下錯誤即可
- 指令一般都依附在元件上使用,在元件image元素上,dispath下errorEvent即可
#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()方法就会被执行到 });
善用public,private,protected 修飾符
angular中public修飾的,spec.ts是可以存取;但是private,protected修飾的,則不可以;
敲黑板
- 如果打算走單元測試,一個個方法測試,那麼請合理使用public --- 難度*
- 如果不打算一個個方法的進行測試,那麼可以透過組織數據,調用入口,把方法通過集成測試-- 難度***
測試click 事件
click事件的觸發,直接js呼叫click,也有模仿滑鼠觸發click事件。
# xx.component.ts @Component({ selecotr: 'dashboard-hero-list' }) class DashBoardHeroComponent { public cards = [{ click: () => { ..... } }] } # html <dashboard-hero-list [cards]="cards" class="card"> </dashboard-hero-list>`
如何測試?
測試想法:
- #直接測試元件,不利用Host
- 利用code傳回的包含click事件的物件集合,逐一調用click ,這樣code coverage 會得到提高
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); });
其餘click 參考思路:
思路一:
- ##利用TestHostComponent,包裹一下需要測試的元件
- 然後利用fixture.nativeElement.querySelector('.card')找到元件上綁定click元素;
- 元素上,觸發dispatchEvent,即可,
- 直接測試元件,不利用Host
- 然後利用fixture.nativeElement.querySelector(' .card'),找到綁定click元素;
- 使用
triggerEventHandler('click');
程式設計影片! !
以上是4個Angular單元測試寫的小技巧,快來看看!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

針對Java中介面和抽象類別進行單元測試的步驟:介面建立一個測試類別。建立一個模擬類別來實作介面方法。使用Mockito庫模擬介面方法並編寫測試方法。抽象類別建立一個測試類別。建立抽象類別的子類別。編寫測試方法來測試抽象類別的正確性。

效能測試評估應用程式在不同負載下的效能,而單元測試驗證單一程式碼單元的正確性。效能測試著重於測量反應時間和吞吐量,而單元測試則關注函數輸出和程式碼覆蓋率。性能測試透過高負載和並發模擬實際環境,而單元測試在低負載和串行條件下運行。效能測試的目標是識別效能瓶頸和最佳化應用程序,而單元測試的目標是確保程式碼正確性和健全性。

PHP單元測試工具分析:PHPUnit:適用於大型項目,提供全面功能,易於安裝,但可能冗長且速度較慢。 PHPUnitWrapper:適合小型項目,易於使用,針對Lumen/Laravel優化,但功能受限,不提供程式碼覆蓋率分析,社群支援有限。

表驅動的測試在Go單元測試中透過表定義輸入和預期輸出簡化了測試案例編寫。語法包括:1.定義一個包含測試案例結構的切片;2.循環遍歷切片並比較結果與預期輸出。在實戰案例中,對字串轉換大寫的函數進行了表格驅動的測試,並使用gotest運行測試,列印通過結果。

單元測試和整合測試是兩種不同的Go函數測試類型,分別用於驗證單一函數或多個函數的交互和整合。單元測試只測試特定函數的基本功能,整合測試測試多個函數之間的互動和與應用程式其他部分的整合。

設計有效的單元測試案例至關重要,遵循以下原則:原子性、簡潔、可重複和明確。步驟包括:確定要測試的程式碼、識別測試場景、建立斷言、編寫測試方法。實戰案例示範了為max()函數建立測試案例,強調了特定測試場景和斷言的重要性。透過遵循這些原則和步驟,可以提高程式碼品質和穩定性。

PHP單元測試中提高程式碼覆蓋率的方法:使用PHPUnit的--coverage-html選項產生覆蓋率報告。使用setAccessible方法覆寫私有方法和屬性。使用斷言覆蓋布林條件。利用程式碼審查工具獲得額外的程式碼覆蓋率洞察。

摘要:透過整合PHPUnit單元測試框架和CI/CD管道,可以提高PHP程式碼品質並加速軟體交付。 PHPUnit允許建立測試案例來驗證元件功能,而GitLabCI和GitHubActions等CI/CD工具可自動執行這些測試。範例:透過測試案例驗證身份驗證控制器,以確保登入功能能如預期運作。
