這篇文章主要介紹Angular中如何進行單元測試的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
前言
之前對單元測試的認知就是復雜,難搞,思路有,就是不知道怎樣去實現,最近一次開會解決問題的過程中,發現原來單元測試可以十分簡單,簡單到幾行代碼就能實現。
示例
下面代碼實現的功能是,判斷課程所在的學院<College> college是否在用戶所有的學院Array<College> colleges中,如果存在,變量show賦值為true,不存在,則賦值為false,如果college為undefined或者null,也賦值為true。
/** * 觀察課程學院是否與用戶所在學院相同 * @param college 課程學院 * @param colleges 用戶學院 */ public whetherShow(college: { id: number }, colleges: Array<{ id: number }>) { Assert.notNull(college, 'college未定義'); const collegeId = college.id; let show = colleges != null && colleges && colleges.length > 0 ? false : true; if (colleges != null) { colleges.forEach(selectCollege => { if (collegeId === selectCollege.id) { show = true; } }); } return show; }
要對該方法進行單元測試,思路就是傳值進去進行對比,重點在于傳值,用之前的思路就是,定義college和colleges,然后進行對比:
it('is show', () => { const course = new Course({id: 1}) const collegeOne = new College({id: 1}); const collegeTwo = new College({id: 2}); component.colleges = []; expect(component.whetherShow(course,component.colleges)).toBe(true); component.colleges = undefined; expect(component.whetherShow(course,component.colleges)).toBe(true); component.colleges = [collegeOne]; expect(component.whetherShow(course,component.colleges)).toBe(true); component.colleges = [collegeTwo]; expect(component.whetherShow(course,component.colleges)).toBe(false); component.colleges = [collegeOne, collegeTwo]; expect(component.whetherShow(course,component.colleges)).toBe(true); });
通過控制臺的信息可以發現,無論是null還是undefined,都是可以通過的,后來老師提供了新的思路,既然要測試的是功能,就不要管怎么傳的,可以不用傳對象,然后就有了下面的寫法:
it('is show', () => { expect(component.whetherShow({id: 1}, null)).toBe(true); expect(component.whetherShow({id: 1}, undefined)).toBe(true); expect(component.whetherShow({id: 1}, [])).toBe(true); expect(component.whetherShow({id: 1}, [{id: 2}, {id: 3}])).toBe(false); expect(component.whetherShow({id: 1}, [{id: 1}, {id: 2}, {id: 3}])).toBe(true); expect(component.whetherShow({id: 1}, [{id: 2}, {id: 3}, {id: 1}])).toBe(true); });
值傳進去了,方法也能判斷了,比起之前的寫法簡直要好太多,而且對于一些方法來說,這種方法省力不少,尤其是對多種情況進行測試,要進行多個變量的定義:
/** * 判斷查詢的關鍵字是否課程代碼或名稱中 * @param course 課程 * @param searchKey 查詢關鍵字 */ public isCodeOrNameContainsSearchKey(course: { code: string, name: string }, searchKey: string) { return searchKey === null || course.code.toLowerCase().indexOf(searchKey.toLowerCase()) !== -1 || course.name.toLowerCase().indexOf(searchKey.toLowerCase()) !== -1; }
該方法實現的是通過課程名稱或代碼進行查詢操作,通過對查詢關鍵字和課程名稱或代碼進行對比實現該功能,要考慮以下幾種情況:查詢關鍵字為null、查詢關鍵字與課程名稱或代碼部分完全不相同、查詢關鍵字與課程名稱或代碼部分相同、查詢關鍵字與課程名稱或代碼完全相同、查詢關鍵字包含課程名稱或代碼。
如果用舊思想進行測試:
it('isCodeOrNameContainsSearchKey', () => { const courseOne = new Course({code: '', name: ''}); const courseTwo = new Course({code: '222', name: ''}); const courseThree = new Course({code: '', name: '222'}); const courseFour = new Course({code: '222', name: '222'}); expect(component.isCodeOrNameContainsSearchKey(courseOne, null)); expect(component.isCodeOrNameContainsSearchKey(courseOne, '')); expect(component.isCodeOrNameContainsSearchKey(courseTwo, '')); expect(component.isCodeOrNameContainsSearchKey(courseTwo, '1111')); expect(component.isCodeOrNameContainsSearchKey(courseTwo, '22')); expect(component.isCodeOrNameContainsSearchKey(courseTwo, '222')); expect(component.isCodeOrNameContainsSearchKey(courseTwo, '2222')); expect(component.isCodeOrNameContainsSearchKey(courseThree, '')); expect(component.isCodeOrNameContainsSearchKey(courseThree, '1111')); expect(component.isCodeOrNameContainsSearchKey(courseThree, '22')); expect(component.isCodeOrNameContainsSearchKey(courseThree, '222')); expect(component.isCodeOrNameContainsSearchKey(courseThree, '2222')); expect(component.isCodeOrNameContainsSearchKey(courseFour, '')); expect(component.isCodeOrNameContainsSearchKey(courseFour, '1111')); expect(component.isCodeOrNameContainsSearchKey(courseFour, '22')); expect(component.isCodeOrNameContainsSearchKey(courseFour, '222')); expect(component.isCodeOrNameContainsSearchKey(courseFour, '2222')); });
如果使用新思想:
it('isCodeOrNameContainsSearchKey', () => { expect(component.isCodeOrNameContainsSearchKey({code: '', name: ''}, null)).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '', name: ''}, '')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: ''}, '')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: ''}, '1111')).toBe(false); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: ''}, '22')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: ''}, '222')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: ''}, '2222')).toBe(false); expect(component.isCodeOrNameContainsSearchKey({code: '', name: '222'}, '')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '', name: '222'}, '1111')).toBe(false); expect(component.isCodeOrNameContainsSearchKey({code: '', name: '222'}, '22')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '', name: '222'}, '222')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '', name: '222'}, '2222')).toBe(false); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: '222'}, '')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: '222'}, '1111')).toBe(false); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: '222'}, '22')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: '222'}, '222')).toBe(true); expect(component.isCodeOrNameContainsSearchKey({code: '222', name: '222'}, '2222')).toBe(false); });
設想一下自己看到他人寫的測試代碼,如果所需要的變量很少,courseOne等等能滿足需求,看著也沒問題,但是當變量很多的時候,估計寫測試的都會忘記每個變量的屬性值,更不用說看的人,而且,使用下面的方法寫的代碼,所需字段以及字段值一目了然,一行代碼就能體現所有信息,看著也賞心悅目。
以上是Angular中如何進行單元測試的方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。