自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

前端自動化測試:測試到底測什么?

開發(fā) 前端 自動化
在實際開發(fā)過程中,編寫自動化測試代碼通常是開發(fā)人員不太喜歡的一個環(huán)節(jié)。大多數情況下,前端開發(fā)人員在開發(fā)完一項功能后,只是打開瀏覽器手動點擊,查看效果是否正確,之后就很少對該塊代碼進行管理。

[[407303]]

 對于稍微有一些開發(fā)經驗的同學在開發(fā)過程中總會經歷下面類似的問題:

  • 每次在版本發(fā)布上線之前,在電腦前蹲上好幾個小時甚至是更長時間對你的應用進行測試,這個過程非??菰锒纯?。
  • 當代碼的復雜度達到了一定的級別,當維護者的數量不止你一個,你應該會逐漸察覺到你在開發(fā)新功能或修復 bug 的時候,會變得越發(fā)小心翼翼,即使代碼看起來沒什么問題,但你心里還是會犯嘀咕:這個 Feature 會不會帶來其他 Bug ?這個 Fix 會不會引入其他"Feature" ?
  • 當你想要對項目中的代碼進行重構的時候,你會花費大量的時間進行回歸測試。

以上這些問題都是由于大多數開發(fā)者所使用最基本的手動測試的方式所帶來的問題,解決它的根本舉措就是引入自動化測試方案。

測試的流程

在實際開發(fā)過程中,編寫自動化測試代碼通常是開發(fā)人員不太喜歡的一個環(huán)節(jié)。大多數情況下,前端開發(fā)人員在開發(fā)完一項功能后,只是打開瀏覽器手動點擊,查看效果是否正確,之后就很少對該塊代碼進行管理。

造成這種情況的原因主要有兩個:

  • 一個是業(yè)務繁忙,沒有時間進行測試的編寫。
  • 另一個是不知道如何編寫測試。

但這些問題不應該作為我們掌握前端自動化測試的絆腳石。而且,一旦掌握了前端自動化測試方案,無論是對大型項目的開發(fā),還是升職加薪,都是有益的。

提到測試的時候,即使是最簡單的一個代碼塊可能都讓初學者不知所措。最常問的問題的是“我怎么知道要測試什么?”。如果你正在寫一個 Web 應用,那么你每個頁面每個頁面的測試用戶交互的方式,就是一個很好的開端了。但 Web 應用也是由很多個函數和模塊組成的代碼單元,也是需要測試的。通常有兩種情況:

  • 你接手的遺留代碼沒有寫測試用例
  • 你必須從無到有的實現一個新功能

該怎么辦呢?對于上面兩種場景,你可以把測試視為代碼的一部分來編寫。我所說的這些代碼,是用來檢查給定的函數是否產生預期輸出結果的。一個典型的測試流程如下:

1. 引入要測試的函數

2. 給函數一個輸入

3. 定義預期輸出

4. 檢查函數是否返回了預期的輸出結果

就這么多。這樣看測試也沒那么可怕的嘛:輸入 —— 預期輸出 —— 驗證結果。

一個測試案例

下面來看一個例子:

  1. // math.js 
  2. functionadd (a, b) { 
  3.   return a + b 
  4.  
  5. functionsubtract (x, y) { 
  6.   return x - y 
  7.  
  8. module.exports= { 
  9.   add
  10.   subtract 

如何保證上面代碼的正確性?

下面來寫一段測試代碼:

  1. // test.js 
  2.  
  3. const { add, subtract } =require('./math'
  4.  
  5. const result =add(1,2) 
  6. const expected =3 
  7.  
  8. if (result !== expected) { 
  9.   thrownewError(`1 + 2 應該等于${expected},但是結果卻是${result}`) 
  10.  
  11. const result2 =subtract(2,1) 
  12. const expected2 =1 
  13.  
  14. if (result2 !== expected2) { 
  15.   thrownewError(`2 - 1 應該等于${expected2},但是結果卻是${result2}`) 

命令行執(zhí)行 node test.js 后,會看到錯誤信息:

  1. Error: 1 + 2 應該等于 3,但是結果卻是 2 

通過測試代碼可以很方便的幫助驗證代碼的正確性。

封裝測試工具函數

之前示例的測試代碼太過繁瑣,可以思考一下能否封裝的更簡便一些,比如下面這樣:

  1. expect(add(1,2)).toBe(3) 
  2. expect(subtract(2,1)).toBe(-1) 

上面的測試代碼就像自然語言說話一樣,很舒服。

實現 expect 方法:

  1. // test.js 
  2. const { add, subtract } =require('./math'
  3.  
  4. expect(add(1,2)).toBe(3) 
  5. expect(subtract(2,1)).toBe(1) 
  6.  
  7. functionexpect (result) { 
  8.   return { 
  9.     toBe (actual) { 
  10.       if (result !== actual) { 
  11.         thrownewError(`預期值和實際值不相等,預期結果: ${actual},實際結果: ${result}`) 
  12.       } 
  13.     } 
  14.   } 

增加錯誤提示信息:

  1. // test.js 
  2. const { add, subtract } =require('./math'
  3.  
  4. test('測試加法', () => { 
  5.   expect(add(1,2)).toBe(3) 
  6. }) 
  7.  
  8. test('測試減法', () => { 
  9.   expect(subtract(2,1)).toBe(1) 
  10. }) 
  11.  
  12. functiontest (description, callback) { 
  13.   try { 
  14.     callback() 
  15.     console.log(`${description}通過測試`) 
  16.   } catch (err) { 
  17.     console.error(`${description}沒有通過測試:${err}`) 
  18.   } 
  19.  
  20. functionexpect (result) { 
  21.   return { 
  22.     toBe (actual) { 
  23.       if (result !== actual) { 
  24.         thrownewError(`預期值和實際值不相等,預期結果: ${actual},實際結果: ${result}`) 
  25.       } 
  26.     } 
  27.   } 

本文轉載自微信公眾號「勾勾的前端世界」,可以通過以下二維碼關注。轉載本文請聯系勾勾的前端世界公眾號。

 

責任編輯:姜華 來源: 勾勾的前端世界
相關推薦

2021-06-30 19:48:21

前端自動化測試Vue 應用

2021-06-26 07:40:21

前端自動化測試Jest

2023-05-18 14:01:00

前端自動化測試

2022-09-14 10:00:12

前端自動化測試

2016-09-26 16:42:19

JavaScript前端單元測試

2012-05-24 15:01:35

James Bach測試自動化

2011-12-23 17:09:57

自動化測試

2012-12-24 22:54:31

2014-04-16 14:15:01

QCon2014

2021-07-02 17:22:50

前端TDDBDD

2017-01-16 13:38:05

前端開發(fā)自動化

2022-02-17 10:37:16

自動化開發(fā)團隊預測

2012-02-27 17:34:12

Facebook自動化

2021-09-03 09:56:18

鴻蒙HarmonyOS應用

2013-05-16 10:58:44

Android開發(fā)自動化測試

2009-08-19 09:00:48

單元測試框架自動化測試

2024-11-01 15:05:12

2022-09-14 23:14:26

前端自動化測試工具

2023-11-01 07:01:07

自動化測試自動測試工具

2011-06-03 17:24:48

自動化測試
點贊
收藏

51CTO技術棧公眾號