單元測試及原理
單元測試是指對軟體中的最小可測試單元進行檢查和驗證,通過單元測試可以檢測出潛在的bug,還可以快速反饋功能輸出,驗證程式碼是否達到預期,也可以保證程式碼重構的安全性。
有這樣一個方法:
let add = (a, b) => a + b;
複製程式碼
這是一個很簡單的計算兩個數的和的方法,假如我們想看看他的邏輯對不對,我們可以呼叫一下,然後跟我們預期的一個值比較下,如果不符合就丟擲一個錯誤:
let add = (a, b) => a + b;
let result = add(1, 2);
let expect = 3;
if(result !== expect){
throw new Error(`1+2應該等於${expect},實際等於${result}`)
}
複製程式碼
這其實就是單元測試的原理,但是這裡寫的方法太直白,而且不能複用,讓我們改造下expect
,把它變成一個通用方法:
const expect = (res) => {
return {
toBe: (expectRes) => {
if(res !== expectRes){
throw new Error(`期望值是${expectRes},但實際上卻是${res}!`)
}
}
}
}
複製程式碼
我們前面期望1+2=3
,這其實就是一個單元測試用例,當我們有多個用例的話,我們可以用一種更通用優雅的方式來寫用例,我們來寫一個通用用例方法:
const test = (desc, fn) => {
try{
fn();
console.log(`${desc} -> PASS`)
}catch(e){
console.error(`${desc} -> FAIL`, e);
}
}
複製程式碼
我們用這兩個通用方法來改寫下我們的單元測試:
let add = (a, b) => a + b;
const expect = (res) => {
return {
toBe: (expectRes) => {
if(res !== expectRes){
throw new Error(`期望值是${expectRes},但實際上卻是${res}!`)
}
}
}
}
const test = (desc, fn) => {
try{
fn();
console.log(`${desc} -> PASS`)
}catch(e){
console.error(`${desc} -> FAIL`, e);
}
}
test('1+2=3', () => {
expect(add(1,2)).toBe(3); // 1+2=3 -> PASS
});
test('1+2=4', () => {
expect(add(1,2)).toBe(4); // 1+2=4 -> FAIL Error: 期望值是4,但實際上卻是3!
});
複製程式碼
上面介紹的是單元測試的原理,事實上在我們寫單元測試的時候並不需要自己寫expect
和test
公用方法,需要用到的比對方法也遠遠不止toBe
一個。我們可以直接用第三方庫Jest,他包含了幾乎所有我們需要的工具,使用方法官網都有,這裡主要講原理,使用方法不再贅述。
原創不易,每篇文章都耗費了作者大量的時間和心血,如果本文對你有幫助,請點贊支援作者,也讓更多人看到本文~~
更多文章請看我的掘金文章彙總