JS單元測試及原理

單元測試

單元測試是指對軟件中的最小可測試單元進行檢查和驗證,通過單元測試可以檢測出潛在的bug,還可以快速反饋功能輸出,驗證代碼是否達到預期,也可以保證代碼重構(gòu)的安全性。

有這樣一個方法:

let add = (a, b) => a + b;

這是一個很簡單的計算兩個數(shù)的和的方法,假如我們想看看他的邏輯對不對,我們可以調(diào)用一下,然后跟我們預期的一個值比較下,如果不符合就拋出一個錯誤:

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,這其實就是一個單元測試用例,當我們有多個用例的話,我們可以用一種更通用優(yōu)雅的方式來寫用例,我們來寫一個通用用例方法:

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!
});

上面介紹的是單元測試的原理,事實上在我們寫單元測試的時候并不需要自己寫expecttest共用方法,需要用到的比對方法也遠遠不止toBe一個。我們可以直接用第三方庫Jest,他包含了幾乎所有我們需要的工具,使用方法官網(wǎng)都有,這里主要講原理,使用方法不再贅述

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容