成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

放棄 Jest 后,運行時間減少 90%!

開發 前端
Jest 是個眾所周知的、功能完備的測試框架,曾經在選擇時并沒有經過深思熟慮。然而,經過數百次測試后,情況開始變得很糟糕。內存泄漏開始浮出水面,臨時的標志位數量增多,經常訪問 Jest 的 issues 標簽頁已經成為家常便飯。

這是一個關于 Jest 在 JS 服務端的經驗分享,注意,不是 UI 測試。如果你對 Jest 感到滿意,請不要切換!這不是為了說服任何人。

Jest 是個眾所周知的、功能完備的測試框架,曾經在選擇時并沒有經過深思熟慮。然而,經過數百次測試后,情況開始變得很糟糕。內存泄漏開始浮出水面,臨時的標志位數量增多,經常訪問 Jest 的 issues 標簽頁已經成為家常便飯。

問題

以下是作者曾在 Jest 中遇到的一些問題,通過這些標志可以幫助排插問題或提高部分的性能,如果你在使用 Jest,可以做為一個參考。

  • jest —logHeapUsage:監視堆使內存用情況,以發現突然增長的內存泄漏。
  • jest —maxWorkers=50%:一些基準測試顯示,該配置可使測試運行速度提高 20%,也有些人說這會變得更糟。
  • jest —runInBand: 這在當前進程中串行運行所有測試,而不是創建一個子進程的工作池。有人說這對于調試很有用,但奇怪的是,一些人報告說它實際上可以提高性能。
  • jest —changedSince:該標志可以顯著減少 PR 工作流程所需的時間。
  • jest-slow-test-reporter:這個報告器可以發現你項目中最慢的測試。
  • --expose-gc:暴露 Node.js 的垃圾收集器。某些情況下,使用 --expose-gc 標志運行 Node 似乎能更好地處理內存泄漏。

不夠好

這些策略中的一些在這段時間內顯著減少了運行時間。然而,學習和實施它們的過程是以交付時間為代價的,而這實際上更為關鍵。

測試是如此緩慢,以至于我只在我們當前正在開發的模塊上運行它們,然后只在PR中更改的模塊上運行它們,最后,所有的測試只有在合并到主分支時才會運行。不幸的是,這種方法導致了識別錯誤的延遲。

測試如此耗時,以至于我發現自己在為某些功能猶豫是否編寫測試,擔心它們會導致額外的構建過程時間。在這一點上,我意識到是時候轉變了

切換到 Mocha

我十年前用過 Mocha,感覺非常棒。所以,我以為回到 Mocha 會很順利。在過去的幾年里,我看到人們一直在拋棄從 Jest 到 Mocha 的想法,而我總是覺得很有趣。我記得有很多指南和人們在談論從 Mocha 遷移到 Jest。像我一樣,大多數人會認為更新的工具會有更好或者至少類似的性能。

遷移比預期的要容易得多。幾個替換案例,少于一個小時的重構一些代碼。比較困難的部分是模擬引擎,這在 Mocha 中沒有包含。

我本來可以使用 Sinon.js 來做到這一點,但我真的很喜歡有一天不依賴任何測試庫的想法。我甚至考慮過只使用新的 Node.js 內置測試運行器,但對我來說它還不夠完善。所以,我決定只使用內置的 MockTracker。

嘗試后讓人驚訝。使用 Jest 運行需要3秒的單個測試,在 Mocha 中只需要不到 200ms。這應該不足為奇——我運行的測試不應該花費那么長時間,但我已經習慣了那種緩慢。最終,我們的測試運行時間從超過 12 分鐘縮短到不到 40 秒。

Mocha 的速度幫助我們發現了隱藏的錯誤,這些錯誤偶爾會導致測試失敗,因為它們只在非常特殊的條件下發生——這些條件在 Jest 中由于其較慢

結論

我仍然在我維護的一些較小的代碼庫中使用 Jest,并且除非它們成為問題,否則我不會瘋狂地遷移它們。然而,對于未來的項目,我肯定會選擇 Mocha 或 Node.js 測試運行器。

問題在于,即使有一種方法可以優化 Jest 并在合理的時間內運行數千個測試,但僅僅切換測試框架就能顯著提高性能,這是有問題的。你同意嗎?你有類似的經歷嗎?我很樂意聽聽。

作者 | Patrickrbc翻譯、整理 | 五月君原文 https://patrickrbc.com/2024/03/16/jest-slow-tests

責任編輯:武曉燕 來源: 編程界
相關推薦

2021-08-18 08:32:09

代碼運行時間示波器

2015-07-20 15:44:46

Swift框架MJExtension反射

2020-04-06 11:47:44

Linux命令腳本

2010-01-27 14:14:48

C++程序運行時間

2024-03-21 09:15:58

JS運行的JavaScrip

2019-10-14 09:14:37

Linuxbash命令

2019-07-12 09:30:12

DashboardDockerDNS

2021-09-11 15:38:23

容器運行鏡像開放

2022-11-04 09:09:54

Linux服務器

2021-06-24 10:28:19

uptimed命令Linux

2013-11-26 16:49:55

Android開發運行時KitKat

2020-12-07 13:31:43

GoMutex開發者

2023-07-28 10:42:43

2024-03-20 10:46:00

云原生容器

2023-01-03 09:10:21

2022-01-19 08:50:53

設備樹Linux文件系統

2023-08-29 08:20:35

Kubernete跨云容器

2021-08-27 00:21:19

JSJust源碼

2023-02-12 12:00:57

2022-12-30 08:08:30

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区电影 | 男人的天堂中文字幕 | 成人影视网址 | 日韩精品一区二区三区中文在线 | 999国产精品视频免费 | 久久久久一区二区三区四区 | 成人午夜在线观看 | 久在线视频播放免费视频 | 91精品导航 | 97精品超碰一区二区三区 | 农夫在线精品视频免费观看 | 免费特黄视频 | 成人影院一区二区三区 | av电影一区 | 国产精品久久一区二区三区 | 999久久久| 成年免费在线观看 | 亚洲综合色自拍一区 | 亚洲a在线视频 | 国产欧美日韩久久久 | 日韩精品中文字幕在线 | av天天操 | 午夜电影福利 | 亚洲自拍偷拍欧美 | av看看| 99免费| 国产一级在线观看 | 黄频视频 | 精品久久久久久久久久久久久久 | 美女在线国产 | 国产精品久久久久久久久污网站 | 国产激情视频网 | 亚洲顶级毛片 | 特级a欧美做爰片毛片 | 神马影院一区二区三区 | 亚洲永久免费观看 | 四虎影院在线免费观看 | 日韩一区二区三区在线 | 国产精品免费观看 | 免费毛片www com cn | 久久国产一区 |