<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          測試工具比較:選Jest,不選Mocha

          時間:?2017-11-27閱讀:?8393標簽:?測試

          我們Automattic公司的WordPress.com是由Calypso項目推動的,而這個項目中所有的測試用的都是Mocha框架。項目中還包括端到端測試,都保存在自己獨立的代碼庫里。這套設定我們已經用了三年多了,我覺得是時候該重新審查一下這個選擇。我發現這篇[單元測試工具的比較]文章(https://mo.github.io/2017/06/05/javascript-unit-testing.html)非常有幫助,可以用來評估不同的選擇。文中,作者**Martin Olsson**給我們分享了他的結論,我強烈贊同這個結論:

          我覺得,要繼續使用Javascript,就很難忽視Jest的勢頭。當然,如果這個編號#2059的問題能修好就太棒了。然后還是要說一下,對不少人來說,Mocha似乎已經夠用了。

          在這個貼子里,我想突出說明一下這個名叫Jest的測試工具的特色。這些特色使它成為一個很有吸引力的選擇。我們有幾次簡單地內部討論過Jest,主要集中在快照功能這一獨特的測試方法上。在我看來,這個功能只不過是錦上添花,所以我更想討論一下其它我認為更重要的優點。


          Calypso項目的概念驗證

          我創建了兩個合并請求,調查把測試從Mocha遷移到Jest需要花多少功夫。所有驗證服務器代碼執行的單元測試都要能在Jest里正常運行,要達到這個程度還是相當易的。我又重寫了測試文件,用了Jest的API接口,和Mocha進行比較來說明其測試編寫方法如何。這些基本層面以外,我甚至都已經可以把Jest和Circle CI持續集成,以及PhpStorm編輯器結合起來了,還有設置代碼覆蓋率(code coverage)和監控模式(watc也沒花多少時間。想要更多細節的話,可以去看這個合并請求,已經快敲定了。

          對于客戶端運行的測試,我也做了試驗。和之前服務器代碼相同,多數情況下復制粘貼,再加上一些變動,就足以讓測試協助開發了。可惜70

          所有550多個通過的測試在Moc一a其中一位行的時間是10秒,但剩下的150多個測試卻又花了40秒,這個情況比較有意思。在Jest里,通過的測試20秒,未通過的測試50秒。我覺得就算把mockery模擬模塊換成Jest自己的模擬功能,再加上useFakeDom輔助函數和Jest瀏覽器環境選項,也很難說性能會怎么樣,不過個人估計還是會有些提高的。

          另外,我們這里還在說幾秒幾秒,別的公司轉到Jest后已經能夠將執行時間減少幾分鐘了,這也是挺有意思的。查一下愛彼迎的個案研究


          Jest總述

          我第一次聽說Jest是在去年,但是Facebook的工程師已經使用了多年。目前它還是由Facebook開發并維護,但外部協助開發也越來越多。

          要了解Jest,最好的方法就是聽一聽其中一位創作者怎么說的。我推薦去看一下由Chris Pojer作的演講,創建高質量JavaScript工具,錄于2017年歐洲JS大會

          我們Automattic公司已經在使用Jest了,測試Delphin項目的代碼。就是這個項目推動了https://get.blog博客功能,使是用戶能注冊.blog域名。還有Simplenote for Electron也是使用Jest驗證代碼的項目。


          簡化API

          Jest既簡單又強大,內置支持以下功能:

          • 靈活的配置:比如,可以用文件名通配符來檢測測試文件。

          • 測試的事前步驟(Setup)和事后步驟(Teardown),同時也包括測試范圍。

          • 匹配表達式(Matchers):能使用期望expect句法來驗證不同的內容。

          • 測試異步代碼:支持承諾(promise)數據類型和異步等待async / await功能。

          • 模擬函數:可以修改或監查某個函數的行為。

          • 手動模擬:測試代碼時可以忽略模塊的依存關系。

          • 虛擬計時:幫助控制時間推移。

          還有更多的功能,有些我會在下面的部分里更寬泛地談談。


          性能與隔離

          Jest文檔里寫道:

          Jest能運用所有的工作部分,并列運行測試,使性能最大化。終端上的信息經過緩沖,最后與測試結果一起打印出來。沙盒中生成的測試文件,以及自動全局狀態在每個測試里都會得到重置,這樣就不會出現兩個測試沖突的情況。

          Mocha用一個進程運行所有的測試,和它比較起來,Jest則完全不同。要在測試之間模擬出隔離效果,我們必須要引入幾個測試輔助函數來妥善管理清除工作。這種做法雖然不怎么理想,但99%的情況都可以用,因為測試是按順序進行的。


          沉浸式監控模式

          快速互動式監控模式可以監控到哪些測試文件有過改動,只運行與改動過的文件相關的測試,并且由于優化作用,能迅速放出監控信號。設置起來非常簡單,而且還有一些別的選項,可以用文件名或測試名來過濾測試。我們用Mocha時也有監控模式,不過沒有那么強大,要運行某個特定的測試文件夾或文件,就不得不自己創造解決方法,而這些功能Jest本身就已經提供了,不用花力氣。


          代碼覆蓋率

          Jest內置有代碼覆蓋率報告功能,設置起來易如反掌。可以在整個項目范圍里收集代碼覆蓋率信息,包括未經受測試的文件。同樣的結果到目前為止我們還未能用Mocha實現過,當然也可能是因為我們沒花太多時間嘗試。


          與IDE的整合

          靠命令行和持續集成工具CircelCI上運行的配置文件,我把Jest和PhpStorm整合了起來,只要點擊就能瀏覽并找到指定的測試,也可以只重新執行單個測試。這種事我的同事過去經常問我怎么做,過去也曾把Mocha和IDE整合起來過工作,但引入自主測試文件收集機制之后就無法使用了。


          自定義報告整合

          要使完善Circle CI整合,只需要一個自定義報告功能。有了Jest,用jest-junit-reporter就可以做到,其用法和Mocha幾乎相同。


          快照功能

          第一次看到Jest快照功能操作時,我對這個概念有了一絲疑慮,因為這個概念不符合測試優先(test-first)方式。不過,第一次聽到JSX和Redux時,我也是心情復雜。既然有了那種體會,那一旦用了這個快照功能,相信我也一定會成為它點贊的。最終結果是快照幫助我們確信界面的變化不是無法預測的。以下是Jest文檔里對這個功能的描述:

          快照測試的目的不是要替換現有的單元測試,而是要使之更有價值,讓測試更輕松。在某些情況下,某些功能比如React組件功能,有了快照測試意味著無需再做單元測試,但同樣這兩者不是非此即彼。

          要想更多了解Jest快照功能,可以看一下Rogelio Guzman2017年React大會上錄制的演講:


          多重項目運行功能

          目前我們設置了四個部分,每個部分都在不同的配置下運行測試。我們這么做是想能夠同時運行整合測試與單元測試。單元測試需要接觸位于服務器上、在瀏覽器中執行的代碼,還要對一些測試輔助函數本身進行驗證。Jest團隊最近引進了一個方法能夠同時運行多個項目,這將極大地簡化監控模式和IDE整合。我還沒能找到方法來把這個功能應用到我們的代碼基上,但看起來很有前景。


          新的測試框架

          在Facebook公司,人們也在一直努力想換掉Jasmine框架,改用自己測試框架叫jest-circus。第一批改動已經完成,并進入Jest的軟件庫了:

          用Jasmine,很難做得快點。因為代碼基不是屬于我們的,所以無論是引入新的功能、修復存在的錯誤、改變現有的設計還是光調試代碼基都很困難。此外,Jasmine的代碼基并不是流類型的,這樣整合起來就更難了。

          這個合并請求的目的是將Jasmine替換另一個框架,能夠再現其功能,但同時又能盡量簡化一切。

          他們還把Jasmin 2.5版進行了分支,歸入到了Jest自己的測試運行器中去,Jasmine中很大的幾部分都重寫了,并在最新的Jest 20版中發布了。


          小結

          Jest的未來看起來非常令人激動!看到Jest推陳出新如此快速,我感覺它將很快成為整個React生態系統中大部分項目的首選工具。

          我建議,應該把測試遷移到Jest上去。要最終決定,以下幾點應該考慮:

          正面因素:

          • API更簡單,樣板代碼更少。

          • 靈活且容易配置。

          • 測試文件彼此隔離執行。

          • 高級監控模式。

          • 快照支持,測試更容易上手。

          • 代碼覆蓋率。

          負面因素:

          • 多一次遷移活動。

          • Mocha性能仍然略勝一籌(依據是我的快速測試)

          來源: 原文鏈接
          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/170

          測試框架 Mocha 實例教程

          本文全面介紹如何使用 Mocha,讓你輕松上手。如果你以前對測試一無所知,本文也可以當作 JavaScript 單元測試入門。值得說明的是,除了 Mocha 以外,類似的測試框架還有 Jasmine、Karma、Tape 等,也很值得學習。

          理解前端自動化測試TDD + BDD

          在日常的開發中,整天趕需求的我們好像沒有時間顧及自動化測試,尤其是在敏捷開發的時候。但其實自動化測試可以幫助我們提高代碼和功能的健壯程度,大幅減少可能出現的bug。尤其是在復雜系統中

          angular如何使用mock?

          前后端分離的開發模式中, 為了能讓前端不依賴后端服務而能夠并行開發, angular-mocks能模擬一些后臺返回的數據,從而使前端看起來已經跟后端對接了一樣, 只要與后端商定好數據格式, 自己mock一些數據就能夠對前端功能進行測試了.

          Node.JS中回調嵌套和async/await執行空函數性能效率對比測試

          asyn/await關鍵字可以讓原來的回調嵌套和鏈式寫法,改造成同步語法。util.promisify可以很方便地將回調函數Promise化,那么Promise函數的async/await執行和回調函數的嵌套執行或鏈式執行在性能上有差異嗎?

          Web性能壓力測試工具之WebBench詳解

          webbench的標準測試可以向我們展示服務器的兩項內容:每秒鐘響應請求數和每秒鐘傳輸數據量。webbench不但能具有便準靜態頁面的測試能力,還能對動態頁面(ASP,PHP,JAVA,CGI)進 行測試的能力。

          使用 React Testing Library 和 Jest 完成單元測試

          構建一個 web 應用對于我們來說,并非什么難事。因為有很多足夠多優秀的的前端框架(比如 React,Vue 和 Angular);以及一些易用且強大的UI庫(比如 Ant Design)為我們保駕護航,極大地縮短了應用構建的周期。

          Jest 初學者教程:JavaScript 測試入門

          在編程術語中,測試意味著檢查我們的代碼是否符合某些期望。例如:一個名為 “ transformer” 的函數應在給定某些輸入的情況下返回期望的輸出。測試類型很多,但簡單來說測試分為三大類:

          Js測試框架

          Jest是Facebook團隊構建和維護的JavaScript測試框架,基于Jasmine的JavaScript單元測試框架。Jest在2018年接受度非常高,今年在JavaScript社區更是如此,根據Github的數據,目前超過150萬個項目在使用Jest

          開發中的測試名詞解釋

          Alpha測試是由用戶在開發環境下進行的測試,也可以是開發機構內部的用戶在模擬實際操作環境下進行的測試,測試環境受開發方控制,用戶數量相對較少

          Jest單元測試框架

          在命令行工具中輸入以下命令,初始化前端項目并生成package.json:babel-jest、 babel-core、 regenerator-runtime、babel-preset-env這幾個依賴是為了讓我們可以使用ES6的語法特性進行單元測試

          內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權或違規,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网