精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

美女18一级毛片一品久道久久综合| 国产一级免费视频| 亚洲日本va| 亚洲国产成人porn| 久久婷婷开心| 中文字字幕在线观看| 综合久久精品| 亚洲精品98久久久久久中文字幕| 欧美私人情侣网站| 免费黄色在线网站| 夫妻av一区二区| 欧洲精品在线视频| 五月天丁香激情| 免费观看久久av| 91精品国产福利在线观看| 国产真人做爰毛片视频直播| а√天堂中文在线资源bt在线| 韩国三级中文字幕hd久久精品| 性欧美激情精品| 午夜成人亚洲理伦片在线观看| 久久资源综合| 91精品国产综合久久婷婷香蕉| 欧美视频在线观看网站 | 日韩欧美国产小视频| 国产aaa一级片| 污污网站在线观看| 国产欧美日韩不卡| 精品综合在线| 国产www免费观看| 日本一不卡视频| 国内偷自视频区视频综合| 欧美性生交大片| 国产日产一区| 日韩精品高清在线| 麻豆短视频在线观看| 国产亚洲精彩久久| 色网综合在线观看| 成人一区二区免费视频| 国产福利在线播放麻豆| 亚洲国产精品传媒在线观看| 久久超碰亚洲| 免费国产精品视频| 风间由美性色一区二区三区| 亚洲www在线观看| 做爰视频毛片视频| 视频一区在线播放| 欧美在线性爱视频| 国产精品xxxx喷水欧美| 激情综合激情| 欧美激情精品久久久久久黑人| 午夜精品福利在线视频| 日韩欧美午夜| 综合国产在线观看| 免费看的黄色网| 欧美日韩伦理| 一区二区三区www| 国产毛片欧美毛片久久久| 国产传媒欧美日韩成人精品大片| 亚洲精品久久久久中文字幕欢迎你| 亚洲精品久久久久久| 欧美激情精品| 日韩女同互慰一区二区| 亚洲最大视频网| 成人直播在线观看| 亚洲精品国产美女| 泷泽萝拉在线播放| 狠狠综合久久av一区二区蜜桃| 亚洲色图激情小说| 337人体粉嫩噜噜噜| 欧美大人香蕉在线| 久久精品国产综合| 黄色一级免费视频| 在线电影一区| 欧美与欧洲交xxxx免费观看| 国产婷婷色一区二区在线观看| 久久在线91| 国产精品永久免费| 正在播放木下凛凛xv99| 国精产品一区一区三区mba视频| 91天堂在线观看| 亚洲精品无码专区| 91色综合久久久久婷婷| 日韩高清在线播放| а√中文在线8| 香蕉影视欧美成人| www日韩在线观看| 电影91久久久| 精品福利二区三区| 久久久久久久久久久久| 婷婷亚洲五月| 97色在线观看免费视频| 中文在线观看免费高清| 国产精品一级片在线观看| 精品一区久久久久久| 超碰在线国产| 亚洲夂夂婷婷色拍ww47| 日韩中文字幕二区| 日本久久伊人| 亚洲天堂2020| 九九视频在线观看| 日韩专区一卡二卡| www.成人三级视频| jizzjizz在线观看| 亚洲1区2区3区视频| 三级a三级三级三级a十八发禁止| 亚洲一区二区三区日本久久九| 亚洲摸下面视频| 国产成人自拍网站| 乱码第一页成人| 92看片淫黄大片看国产片| 欧美套图亚洲一区| 亚洲制服丝袜av| 538任你躁在线精品免费| 国产精品22p| 日韩在线观看高清| 国产视频1区2区| 国产成人av电影在线观看| 日韩资源av在线| 蜜臀av国内免费精品久久久夜夜| 欧美性大战xxxxx久久久| 四虎精品一区二区| 亚洲视频电影在线| 国产精品老女人精品视频| 欧美一级特黄aaaaaa| 自拍偷拍欧美激情| 黄色永久免费网站| 久久不见久久见国语| 91国内揄拍国内精品对白| 国产精品欧美激情在线| 亚洲国产精品精华液ab| 国产乱子夫妻xx黑人xyx真爽| 中文字幕视频精品一区二区三区| www.xxxx精品| 中文字幕av网站| 久久久久久久综合| 美女福利视频在线| 欧美男人操女人视频| 久久久久国产精品免费网站| 国产乱码一区二区| 国产精品传媒入口麻豆| 亚洲国产精品三区| 精品久久成人| 国产精品久久久久久av下载红粉 | 日韩电影大全在线观看| 天堂√中文最新版在线| 亚洲国产一区自拍| 日韩欧美激情视频| 暴力调教一区二区三区| 国内精品视频一区二区三区| 成功精品影院| 韩国19禁主播vip福利视频| 亚洲国产精品18久久久久久| 亚洲另类色综合网站| 亚洲色图欧美自拍| 91精品推荐| 18成人免费观看网站下载| 免费在线午夜视频| 在线综合+亚洲+欧美中文字幕| 成年人看的免费视频| 久久99国产乱子伦精品免费| 亚洲午夜高清视频| 国产成人免费av一区二区午夜| 超在线视频97| 亚洲AV无码精品色毛片浪潮| 亚洲一区二区精品3399| 欧美一级片黄色| 国产精品日本欧美一区二区三区| 欧美精品欧美精品系列c| 亚洲精品一级二级| xxxxx91麻豆| 不卡的日韩av| 精品久久久一区| 欧美激情亚洲色图| 九九久久精品视频| 精品一二三四五区| 色天下一区二区三区| 国产成人涩涩涩视频在线观看| 成黄免费在线| 91精品国产福利| 全部毛片永久免费看| 久久久777精品电影网影网 | 国产精品99久久久久久久vr| www污在线观看| 欧美日韩夜夜| 成人激情黄色网| 超黄网站在线观看| 亚洲最新视频在线| 精品黑人一区二区三区在线观看| 午夜欧美视频在线观看| 成人黄色a级片| 丁香网亚洲国际| 亚洲少妇久久久| 国内一区二区三区| 日韩电影免费观看在| 九九九九九九精品任你躁| 欧美亚洲国产视频| 国产区在线看| 亚洲欧洲偷拍精品| av加勒比在线| 91福利视频网站| 国产在线视频二区| 国产精品乱码一区二区三区软件 | 国产免费观看久久| 无码人妻丰满熟妇啪啪网站| 日韩精品亚洲一区| 黄色激情在线视频| 久久在线免费| 久久综合九色99| 日本在线一区二区三区| 国产精品啪视频| 交100部在线观看| 欧美精品手机在线| av大片在线看| 亚洲欧美www| 高潮毛片7777777毛片| 精品视频免费在线| 精品人妻无码一区二区性色| 自拍偷拍国产精品| 91成人精品一区二区| 久久综合九色综合久久久精品综合| 天天操精品视频| 日本aⅴ免费视频一区二区三区 | 日韩国产精品久久久久久亚洲| 成人短视频在线观看免费| 久久一区91| 亚洲7777| 欧美精品一区二区三区精品| 精品久久久久久综合日本| 亚洲第一二区| 91久久国产自产拍夜夜嗨| 日韩福利影视| 国产精品色婷婷视频| 欧美最新精品| 国产成人高潮免费观看精品| 狼人综合视频| 91精品国产高清自在线看超| 97人人在线视频| 欧美激情成人在线视频| 欧美1—12sexvideos| 超在线视频97| 中文字幕在线观看网站| 久久五月天色综合| 成人短视频在线| 久久中文字幕在线视频| 国产最新在线| 久久不射电影网| 亚洲奶水xxxx哺乳期| 欧美成人黑人xx视频免费观看| 麻豆影院在线| 久久九九免费视频| 2024最新电影在线免费观看| 欧美久久精品午夜青青大伊人| 黄色网页在线播放| 久久伊人免费视频| 黄色成人在线网| 国内精品模特av私拍在线观看| 91福利在线尤物| 911国产网站尤物在线观看| 在线观看的黄色| 国产成人亚洲综合青青| 日本中文字幕视频一区| 91久久综合亚洲鲁鲁五月天| 日本一区二区三区视频在线看| 国产成人亚洲欧美| 欧美色图婷婷| 视频一区视频二区视频| 欧美激情成人| 免费一级淫片aaa片毛片a级| 亚洲三级色网| 久久久国产欧美| 国产原创一区二区| 在线看黄色的网站| 国产三级久久久| 午夜精品福利在线视频| 精品福利视频导航| 中文字幕一区二区三区四区免费看| 欧美高清激情brazzers| 亚洲精品视频91| 亚洲欧美精品伊人久久| 欧美性猛交xxx乱大交3蜜桃| 欧美激情视频在线| 欧美精品总汇| 97超碰资源| 国产欧美一区二区三区精品观看| 色乱码一区二区三区熟女| 亚洲精品123区| 手机视频在线观看| 懂色av一区二区三区蜜臀| 一级黄色片大全| 亚洲视频网在线直播| 久久露脸国语精品国产91| 欧美伊人久久大香线蕉综合69| 国产哺乳奶水91在线播放| 国产视频在线一区二区| 精品美女在线观看视频在线观看 | 亚洲国产精品一区二区第一页| 欧美一区成人| 女人另类性混交zo| 国产精品99久久久久| 久久亚洲AV无码专区成人国产| 有坂深雪av一区二区精品| 黄色片视频免费| 精品国产91九色蝌蚪| 日本中文字幕在线视频| 欧美一级成年大片在线观看| 成人av在线播放| 欧美亚洲另类久久综合| 国产一区二区三区四区老人| 久久综合久久色| 不卡av电影在线播放| 三级影片在线看| 欧美亚洲国产一区二区三区va | 亚洲午夜未删减在线观看 | av亚洲在线观看| 黄色一级视频片| 国产剧情一区二区三区| 夫妇露脸对白88av| 欧美性生交xxxxx久久久| wwwxxxx国产| 久久精品中文字幕| 国产成人免费| 欧美日韩一区二区三区在线观看免 | 成人在线一区| 玩弄中年熟妇正在播放| 国产成人在线观看免费网站| 亚洲综合久久av一区二区三区| 色狠狠av一区二区三区| 天天综合永久入口| 欧美精品久久久久久久久久| 久久久久亚洲精品中文字幕| 艳色歌舞团一区二区三区| 日本不卡视频在线| 亚洲av无码成人精品国产| 亚洲不卡av一区二区三区| 亚洲AV无码乱码国产精品牛牛| 久久久精品美女| 在线高清欧美| 宅男一区二区三区| 久久福利资源站| 欧美激情视频二区| 欧美三级资源在线| 中文字幕在线播放| 国产精品丝袜久久久久久不卡| 欧美日韩爱爱| 日韩欧美精品在线观看视频| 91社区在线播放| 日韩综合在线观看| 亚洲天堂免费视频| 3d欧美精品动漫xxxx无尽| 茄子视频成人在线观看| 丝袜美腿一区二区三区| 中文字幕免费看| 在线观看一区日韩| 在线观看美女网站大全免费| 国产精品亚洲一区二区三区| 日韩综合网站| 成人av毛片在线观看| 亚洲乱码国产乱码精品精可以看 | 精品在线观看国产| 中文在线最新版地址| 日本在线观看一区二区三区| 日韩国产欧美在线视频| 奇米网一区二区| 欧美一区二区三区喷汁尤物| 女囚岛在线观看| 精品日韩欧美| 日本不卡一二三区黄网| 中文字幕五月天| 亚洲成人xxx| 美女日韩欧美| 在线观看精品视频| 成人一级片在线观看| 日韩精品在线免费视频| 一二美女精品欧洲| 国产色99精品9i| 高清欧美精品xxxxx| 国产亚洲欧美激情| 国产美女明星三级做爰| 国内偷自视频区视频综合| 国产亚洲精品美女久久久久久久久久| 色婷婷成人在线| 亚洲一区二区三区美女| 成人午夜影视| 成人av蜜桃| 日韩精品成人一区二区三区| 91免费公开视频| 亚洲第一福利网| xxxxx.日韩| 草b视频在线观看| 欧美激情在线观看视频免费| 成人av无码一区二区三区| 欧美一区深夜视频| 亚洲精品二区三区| 法国伦理少妇愉情| 欧美一级搡bbbb搡bbbb| 桃色一区二区| 轻点好疼好大好爽视频| 亚洲国产精品国自产拍av| 手机在线观看免费av| 国产在线视频2019最新视频|