精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

前端單測,我們應該測什么?

開發 前端
我們寫測試是因為要確保我們的應用程序在用戶使用它們時能夠正常工作。 有些人可能會用測試用例來提高工作流的效率,但我對提高代碼信心更有興趣,即:我們的測試應該能直接增強我們的代碼信心。

相信很多前端開發在寫單測的時候,最大的問題就是:“我應該測什么東西?” 沒錯,解決問題不是最難的,發現問題才是!知道要測哪個遠比怎么測重要很多!

今天看了 Kent 博客的 《How to know what to test》 的這篇博客,感覺醍醐灌頂,今天就把這篇博文也分享給大家。

正片開始

知道如何做測試很好,也很重要的。我之前就教過很多人測試的基礎知識、如何配置工具、如何針對不用情況寫好測試,等等。但是知道如何測試只是成功的一半,知道要測什么才是更重要的另一半。

永遠記住為什么我們要測試

我們寫測試是因為要確保我們的應用程序在用戶使用它們時能夠正常工作。 有些人可能會用測試用例來提高工作流的效率,但我對提高代碼信心更有興趣,即:我們的測試應該能直接增強我們的代碼信心。這也是我希望你在編寫測試時要考慮的重點:

別太糾結于正在測試的代碼,而要多考慮這些代碼能夠支持的真實用例。

如果你只考慮代碼本身,很容易、也很自然地走向測試代碼細節的不歸路。我們應該要考慮那些更接近用戶的真實使用場景來寫測試。

Code Coverage < Use Case Coverage

在做測試時,代碼覆蓋率是表示我們的代碼有多行被執行的一個指標。舉下面這個例子:

function arrayify(maybeArray) {
if (Array.isArray(maybeArray)) {
return maybeArray
} else if (!maybeArray) {
return []
} else {
return [maybeArray]
}
}

現在,我們還沒有給這個函數寫測試,所以這個函數的覆蓋率為 0%。這種情況下的代碼覆蓋率報告可以讓我們知道:得馬上寫測試了,但它沒有告訴我們這個函數有哪些重要的部分,也沒有告訴我們這個函數支持的真實用例(正是我們在寫測試時最要重點關注的內容)是哪些。

實際上,當我們在考慮應該對整個應用中哪些部分做測試時,覆蓋率報告對于 “我們應該在哪部分投入更多時間” 這個問題幫助不是很大。

覆蓋率報告只能幫助我們知道哪些代碼還沒納入測試。所以,當你看著這份覆蓋率報告時,你不要總想著那些 if/else、循環或者生命周期,而是要問問自己:

這幾行代碼實現對應的是哪些使用用例?我應該要加哪些測試用例來覆蓋它們?

“使用用例覆蓋率” 可以告訴我們當前測試支持了哪些使用用例。可惜的是,現在并沒有類似 “使用用例覆蓋率報告” 這么一說。我們只能自己實現。不過,代碼覆蓋率報告有時候也能告訴我們哪些使用用例沒有覆蓋到。

舉上面函數為例子,看到它的第一眼,我們就能馬上想到它的第一個真實用例:“傳入數組則返回數組”。這就可以作為我們測試用例的標題了:

test('傳入數組則返回數組', () => { expect(arrayify(['Elephant', 'Giraffe'])).toEqual(['Elephant', 'Giraffe'])})

有了上面的測試用例,我們的覆蓋情況如下所示(高亮部分為覆蓋部分):

現在,讓我們來看看還沒被覆蓋的那部分,然后發現還有兩種 Use Case 還沒支持:

  • 傳入 falsy 值,則返回空數組
  • 傳入非 falsy 值且不是數組時,返回一個數組,其中包含的輸入值

現在再來把測試用例都加上,然后再來看覆蓋情況:

test('傳入 falsy 值,則返回空數組', () => {
expect(arrayify()).toEqual([])
})

馬上就可以覆蓋完了!

test(`傳入非 falsy 值也不是數組時,返回一個數組,其中包含的輸入值`, () => { expect(arrayify('Leopard')).toEqual(['Leopard'])})

好了,現在只要我們保證不改變這個函數的這些使用方法,那么我們有信心地說:這些測試都是能通過的。

代碼覆蓋率并不是一個完美的指標,但它卻能幫助我們制作自己的 “使用用例覆蓋率”。

代碼覆蓋率也能隱藏使用用例

有的時候,代碼覆蓋率是 100%,但不意味著使用用例也被覆蓋了 100%。這就是為什么我有時候在寫測試前都會把所有的使用用例想清楚。

舉個例子,假設有一個 arrayify 函數:

test(`傳入非 falsy 值也不是數組時,返回一個數組,其中包含的輸入值`, () => {
expect(arrayify('Leopard')).toEqual(['Leopard'])
})

我們用這兩個用例來實現 100% 的代碼覆蓋:

  • 輸入數組,返回數組
  • 輸入非數組,返回數組,其中包含輸入內容

如果我們來思考一下真實的使用用例,會發現少了一種 Case:

  • 輸入 Falsy 值,返回空數組

如果用戶直接用 arrayify(),那么這樣的測試用例就不能很好地給足我們代碼的信心了。雖然現在看起來還行,就算不給這個 Case 寫測試,我們的代碼也支持這樣的用例,但是,之所以我們要寫測試,是因為我們要確保做了代碼變更之后,它都能支持我們想要的使用用例。

我們繼續來看這樣做測試的后果:假如現在有人看到這一行 filter(Boolean) ,然后覺得:這是哪個 SB 想到的奇葩寫法。最終把這里去掉了。然而,我們的測試依舊是可以通過的,但所有依賴 “輸入 falsy 值” 的這個 Case 的代碼就都掛了。

要對使用用例做測試,而不是代碼

如何應用到 React 代碼的測試?

在寫測試時,你應該時刻想著要支持兩種用戶:真實用戶和開發者。 再啰嗦一句,如果做測試的時候,你還是一直想著業務代碼而不是真實用例,就會很容易陷入測試 “代碼實現細節” 的陷阱。而這么做的后果是,你的代碼會無形中創造第三種用戶:Test User。

很多人在做 React 代碼測試時,經常會想到一些讓他們不斷測 “實現細節” 的測試點。對此,應該別把太多注意點放在要測試的業務代碼上,多想想那些會對真實用戶以及開發者產生影響的東西是什么,這才是你應該要思考的 Use Case,比如:

  • 生命周期方法
  • 元素事件回調
  • 組件內部狀態

相反,一些跟上面兩類用戶有關的一些東西也是要做測試的,比如,它們都會改變 DOM、發 HTTP 請求、執行 Prop 里的回調,或者產生一些可觀察到的副作用,把它們拿來做測試是很有幫助的:

  • 用戶交互(使用 @testing-library/user-event 里的 userEvent):用戶是否在和渲染出來的組件進行交互?
  • 修改 Prop(使用 React Testing Library 里的 rerender):如果別的開發者用新的 Props 來渲染你的組件呢?
  • 修改 Context(使用 React Testing Library 里的 rerender):如果別的開發者修改了 Context 導致你的組件重新渲染呢?
  • 修改訂閱:如果組件訂閱的事件中心做了修改呢?(比如:firebase、redux store、router、media query)

該從何測起?

現在我們都清楚應該要對單測組件或者頁面組件測什么了,那你該從何測起呢?這確實是個讓人頭大的問題,尤其是你要對一個巨大無比的應用進行測試的時候。

好,現在這是你要做的事:從真實用戶的角度來看以及問:

如果應用崩了,那么哪部分會讓人最不爽?

或者換個問法:

應用崩了,最糟糕的地方在哪里?

我會建議你按這個標準來列出你應用支持功能的優先級。 你可以和你的團隊以及 Leader 一起來做這件事,這將會是一次很好的嘗試。而且這次嘗試也會有很多好處:幫助所有人搞清楚測試的重要性,并說服他們:測試也是一件優先級很高的事情。

一旦有了這份優先級清單,我會建議你寫一個端對端的測試來覆蓋住用戶使用最多的場景。一般來說,這種方法都能覆蓋住這份清單前幾項功能。你可能需要多的時間來做這個測試,但是一切都是值得的。

雖然這個 E2E 測試不會給你 100% 的 Use Case 覆蓋率(你千萬別嘗試去弄),也不會給你 100% 代碼覆蓋率(你甚至都別想著要記錄 E2E 的覆蓋率),但它會給你一個很好的開始,而且能立即增強你對當前代碼的信心。

一旦有了幾個 E2E 測試用例之后,你就可以給一些沒在 E2E 范圍內的邊界情況做集成測試,然后再給用到的功能里更復雜的業務邏輯做單元測試。從現在開始,剩下的事情就是不斷加測試就好了。只是別老想著要 100% 的覆蓋率了,不值當。

總結

如果有足夠的時間和經驗,你會培養出一種知道要測試什么的直覺。你可能會犯錯誤或者難受,不要放棄!穩住,我們能贏。

好了,這篇外文就給大家帶到這里了。總的來說,也是很贊同 “要多關注 Use Case 的覆蓋情況而不是代碼覆蓋情況”,畢竟如果完全按照代碼覆蓋率這個指標來的話,有太多的作弊手段了,這完全和寫測試的初衷是相違背的。寫測試的目的應該是增強我們對代碼的自信心,而不是功利地看某個指標。

后面 Kent 說到要如何把測試引入團隊的方法也很值得大家去嘗試:先按功能優先級列出個清單,再寫 E2E 覆蓋住最重要的那部分,再加集成測試,再加單元測試,等一切就緒,那么剩下的就是時間堆測試用例,最后測試用例也能慢慢融入到代碼中了。

責任編輯:武曉燕 來源: 寫代碼的海怪
相關推薦

2022-03-29 09:03:22

測試組件Propsrender

2022-12-23 19:22:47

前端單測

2022-07-06 08:34:17

前端單測項目

2021-06-25 10:57:30

前端自動化測試開發

2014-05-19 13:20:37

數據管理

2023-03-08 22:37:59

單測業務系統

2023-03-14 22:32:24

業務單測數量

2023-04-11 08:02:26

單測技術JUnit框架

2024-04-01 08:26:30

單測覆蓋率字節碼

2012-07-26 10:27:31

PHP

2022-11-24 14:46:59

物聯網數字醫療虛擬現實

2013-01-07 11:31:11

大數據大數據應用

2015-03-11 18:49:53

Testin眾測云測

2021-04-11 07:20:01

應用APP濫用手機隱私風險

2023-03-29 15:01:43

微服務開發

2013-01-08 10:19:35

大數據數據分析大數據全球技術峰會

2022-04-02 10:19:14

物聯網人工智能物聯網安全

2024-04-25 16:57:44

支付寶智能助理AI

2021-11-15 11:03:09

接口壓測工具

2024-07-26 08:35:29

點贊
收藏

51CTO技術棧公眾號

日韩国产在线| 亚洲av无码片一区二区三区| 婷婷精品在线| 欧美在线不卡一区| 中文网丁香综合网| 日本久久一级片| 青草av.久久免费一区| 日韩一级裸体免费视频| 少妇熟女视频一区二区三区| 日韩伦理精品| 2021中文字幕一区亚洲| 另类欧美小说| 99视频精品免费| 欧美三级电影一区二区三区| 国产精品自在欧美一区| 清纯唯美日韩制服另类| 爱爱视频免费在线观看| 香蕉久久夜色精品国产使用方法| 欧美日韩久久一区二区| 男女超爽视频免费播放| 免费高清在线观看| 久久中文字幕电影| 91久久国产综合久久91精品网站| 国产原创视频在线| 影音先锋日韩在线| 国产亚洲精品高潮| 黄色av网址在线观看| av成人在线网站| 色一情一乱一乱一91av| 亚洲精品久久久久久久蜜桃臀| 国外成人在线视频网站| aaaaaav| 国产成人免费视频网站视频社区| 黑人巨大精品欧美一区二区三区| 久久人妻无码一区二区| 日本福利专区在线观看| 久久精品男人天堂av| 国产精品久久国产三级国电话系列| 一本一道精品欧美中文字幕| 丝袜美腿亚洲综合| 欧美一区二区三区精品电影| 久久久久久久久久久97| 亚洲午夜私人影院| 欧美在线视频免费播放| 久久免费黄色网址| 伊人情人综合网| 北条麻妃久久精品| 毛片aaaaaa| 精品一二三区| 亚洲欧洲日产国产网站| 精品无码在线视频| 日韩手机在线| 精品亚洲国产视频| 中文幕无线码中文字蜜桃| 久久悠悠精品综合网| 亚洲福利视频网| 麻豆免费在线观看视频| 欧美激情三级| 欧美一二区视频| 亚洲熟女乱综合一区二区| www.成人| 日韩欧美综合一区| 日批视频在线看| 99re91这里只有精品| 日韩三级视频在线观看| 精人妻一区二区三区| 成人激情自拍| 日韩精品视频在线观看免费| 少妇毛片一区二区三区| 亚洲人成网www| 尤物tv国产一区| 极品色av影院| 欧美体内she精视频在线观看| 欧美激情亚洲国产| 成人免费看片98欧美| 首页国产欧美久久| 国产高清在线不卡| 在线免费看91| 国产电影一区在线| 国内精品一区二区| 久久手机免费观看| 18成人在线视频| 久久av综合网| 欧美暴力调教| 欧美成人精品福利| 亚洲国产无码精品| 色喇叭免费久久综合网| 欧美激情久久久久| 一级黄色av片| 国产激情精品久久久第一区二区| 精品乱子伦一区二区三区| av天在线观看| 亚洲国产精品麻豆| 少妇一级淫免费放| 网站一区二区| 亚洲性69xxxbbb| 欧美日韩偷拍视频| 三级不卡在线观看| dy888夜精品国产专区| 天堂av中文字幕| 国产精品免费久久| 国产97在线|日韩| 一区二区三区在线视频111| 男人天堂久久久| 午夜影院久久久| 色免费在线视频| 欧美做受69| 久久亚洲精品视频| av大全在线观看| 国产精品一区二区久久不卡| 欧美男人的天堂| 国模私拍视频在线播放| 欧美日韩一二三| 影音先锋人妻啪啪av资源网站| 日韩精品一卡| 欧美一级免费视频| 亚洲精品无码专区| 国产精品高潮久久久久无| 黄色一级视频片| 日韩免费精品| 日韩一区二区三区国产| 亚洲国产成人精品女人久久| 国产不卡视频一区| 宅男在线精品国产免费观看| 日本美女一区| 亚洲精品wwwww| 久久综合久久鬼| 狠狠v欧美v日韩v亚洲ⅴ| 奇米影视首页 狠狠色丁香婷婷久久综合| 99视频免费在线观看| 欧美亚洲图片小说| 欧美黑人xxxⅹ高潮交| 人人爽人人爽人人片| 一区二区三区四区五区精品视频| 91在线视频一区| h网站在线免费观看| 狠狠躁夜夜躁人人躁婷婷91| 国产亚洲精品成人a| 亚洲天堂一区二区三区四区| 国产精品亚发布| 大乳在线免费观看| 色婷婷狠狠综合| 在线观看日韩精品视频| 亚洲日本视频| 国产精品一区二区三区观看| 天堂成人av| 欧美一级在线观看| 亚洲综合网在线| 国产在线播放一区| 丰满女人性猛交| 精品视频一区二区三区| 美女黄色丝袜一区| 99riav国产| 一区二区三区四区高清精品免费观看 | 亚洲精品成av人片天堂无码| 国产91精品一区二区麻豆网站 | 3p在线观看| 欧美第一精品| 51精品在线观看| 日韩a在线看| 色婷婷综合久久久久中文| 无码 人妻 在线 视频| 久久一区激情| 亚洲欧美日韩不卡一区二区三区| 福利精品在线| 久久福利视频导航| 丰满少妇一级片| 岛国av一区二区| 欧美黄色一级生活片| 老汉av免费一区二区三区| 日韩视频在线观看视频| 大奶在线精品| 国产成人亚洲精品| 天堂а√在线资源在线| 在线不卡欧美精品一区二区三区| 1024手机在线视频| 99在线视频精品| 亚洲综合在线网站| 亚洲激情五月| 好吊色欧美一区二区三区视频| xxxxx性欧美特大| www高清在线视频日韩欧美| www视频在线| 色综合天天综合网天天狠天天| 中文字幕伦理片| 国产精品一品视频| 丰满爆乳一区二区三区| 日韩一区欧美| 国产精品免费一区二区三区四区| 天堂资源在线| 久久激情视频免费观看| 激情婷婷久久| 国产不卡一区二区在线观看| 精品精品导航| 亚洲欧美国产精品专区久久 | 精品在线91| 2018国产精品视频| 在线日本中文字幕| 精品免费99久久| 3d动漫一区二区三区| 中文字幕+乱码+中文| 国产欧美精品在线观看| 亚洲熟妇一区二区| 青青草原综合久久大伊人精品优势| 国产又粗又爽又黄的视频| 欧美激情在线免费| 成人欧美一区二区三区视频| 欧美黄色成人| 欧美中文字幕精品| 欧美性video| 中文字幕亚洲专区| 四虎在线免费看| 日韩女同互慰一区二区| 在线视频播放大全| 日韩欧亚中文在线| 久草视频精品在线| 亚洲欧美日本韩国| 99热6这里只有精品| 久久这里只有精品6| 亚洲精品久久一区二区三区777| 蜜臀av性久久久久蜜臀aⅴ| 131美女爱做视频| 欧美成人tv| 婷婷视频在线播放| 色婷婷色综合| 日韩欧美一区二区三区四区 | 亚洲国产精品视频一区| 奇米影视777在线欧美电影观看| 97神马电影| 日本成人精品| 成人午夜在线影院| 国产激情欧美| 国产精品一二三视频| 三级成人在线| 国产97在线观看| a日韩av网址| 一区二区欧美视频| 亚洲精品美女久久7777777| 乱亲女h秽乱长久久久| av一区二区三区四区电影| 国产美女视频一区二区| 国产欧美日韩中文| 日日夜夜综合| 成人免费视频在线观看超级碰| 精品久久在线| 国产综合久久久久| 国产精区一区二区| 51成人做爰www免费看网站| 国产精品**亚洲精品| 亚洲综合中文字幕68页| 美女精品视频在线| 99热在线国产| 狼人天天伊人久久| 久久青青草综合| 久久不卡国产精品一区二区| 日韩免费电影一区二区三区| 成人情趣视频网站| 在线丝袜欧美日韩制服| 午夜激情一区| 国产特级淫片高清视频| 久久精品日韩欧美| 亚洲精品午夜在线观看| 激情文学综合丁香| 在线播放av网址| 久久久美女艺术照精彩视频福利播放| 国产手机在线观看| 国产精品免费看片| 久久久久久久久久久久久久久久久 | 久久综合九色欧美狠狠| 国产一区二区三区四区大秀| 亚洲国产精品久久久久久女王| 99久久精品费精品国产风间由美| 四虎4hu永久免费入口| 亚洲国产1区| 农村妇女精品一二区| 美女视频黄频大全不卡视频在线播放| 在线能看的av网站| 成人综合在线观看| 免费在线观看污| 日韩毛片高清在线播放| 久久久久香蕉视频| 亚洲在线视频| 欧美激情在线狂野欧美精品| 9999在线视频| 国产精品2018| 精品国产18久久久久久二百| 国外成人免费视频| 国产精品videosex性欧美| 一卡二卡三卡视频| 日本成人在线不卡视频| 国产在线视频三区| 久久久精品天堂| 中文字幕在线有码| 欧美性xxxx18| a在线观看视频| 亚洲人午夜色婷婷| 欧洲一区二区三区| 国产精品亚洲一区二区三区| 国产无遮挡裸体免费久久| 亚洲精品成人久久久998| 激情综合自拍| 三区视频在线观看| 久久精品视频免费观看| 久久久久香蕉视频| 欧美日韩一区不卡| 色吊丝在线永久观看最新版本| 久久艹在线视频| 精品日本视频| 久久99国产精品| 欧美日韩免费| 亚洲一区二区三区四区五区| 91视频www| 免费一级特黄特色大片| 欧美精品日韩一区| 粉嫩一区二区三区国产精品| 97精品久久久| 91欧美极品| 可以在线看黄的网站| 秋霞影院一区二区| 97超碰在线免费观看| 亚洲一区av在线| 国产特级黄色片| 久久天天躁狠狠躁夜夜av| 色综合天天色| 青青草久久网络| 久久精品中文| 久久久亚洲av波多野结衣| 亚洲3atv精品一区二区三区| 国产成人三级在线播放| 久久午夜a级毛片| 色诱色偷偷久久综合| 日本精品视频一区| 丝袜国产日韩另类美女| 亚洲 小说 欧美 激情 另类| 亚欧色一区w666天堂| 黄色片一区二区三区| 欧美激情欧美激情| 亚洲国产欧美在线观看| 女女百合国产免费网站| 韩国精品免费视频| 小早川怜子一区二区的演员表| 欧美日韩国产大片| h视频网站在线观看| 国产精品黄页免费高清在线观看| 国产探花一区| 中文字幕在线观看第三页| 国产日韩av一区| 中文字幕理论片| 上原亚衣av一区二区三区| 欧美日韩破处视频| 天天成人综合网| 国精产品一区一区三区mba视频 | 特黄视频在线观看| 91精品国产91久久久久久| 女仆av观看一区| 国产成人久久婷婷精品流白浆| 久久婷婷综合激情| 在线观看你懂的网站| 中文字幕免费精品一区| 精品国产乱码一区二区三区| 中文字幕日韩精品无码内射| 成人自拍视频在线观看| 亚洲免费在线观看av| 亚洲色图狂野欧美| 四虎视频在线精品免费网址| 日韩在线视频在线| 91丨九色丨黑人外教| 欧美激情一区二区三区免费观看 | 91成人在线视频观看| 粉嫩蜜臀av国产精品网站| 日韩污视频在线观看| 一区二区成人精品| 高清不卡一区| www.av片| 欧美激情中文不卡| 精品国产乱码久久久久久蜜臀网站| 国自产精品手机在线观看视频| 蜜桃一区二区三区| 日本中文字幕观看| 亚洲大片精品永久免费| 黄色片在线看| 亚洲free性xxxx护士白浆| 99在线精品视频在线观看| 天堂在线中文视频| 日韩免费电影网站| 欧美性猛交xxx高清大费中文| 在线不卡日本| 91网站在线观看视频| 国产精品久久久久久无人区| 97超碰国产精品女人人人爽| 99久久影视| 亚洲观看黄色网| 91精品在线一区二区| 亚洲妇女成熟| 性生活免费观看视频| 国产亚洲精品免费| www精品国产| 国产啪精品视频网站| 老鸭窝亚洲一区二区三区| 一区二区在线观看免费视频|