一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

JavaScript 單元測試現(xiàn)狀

  不管使用什么編程語言和平臺,編寫單元測試都是被廣為接受的技術(shù)實踐,以便交付易于維護的代碼。這對于JavaScript這樣的動態(tài)語言尤為重要,目前已經(jīng)有一些針對JavaScript的單元測試框架和庫供大家選擇。

  InfoQ與目前流行的一些JavaScript單元測試框架的作者進行了問答,問題主要針對他們的項目以及開發(fā)人員可以從中獲得哪些好處。

  參與者包括: 

  • QUnit的作者Jörn Zaefferer
  • Jasmine的作者Davis Frank
  • Jarvis的作者Tommy Montgomery
  • jfUnit的作者Felipe Nascimento de Moura

  InfoQ: 你的項目是做什么的,和其他JavaScript測試框架有什么不同?

  Jörn Zaefferer : QUnit是一個JavaScript單元測試框架,主要用于在瀏覽器中運行單元測試。雖然這個項目從屬于jQuery,但卻不依賴于jQuery,也不依賴于瀏覽器DOM。因此你也可以在node.js或Rhino上使用。QUnit很容易學(xué)習(xí),你只需在html頁面中包含兩個文件,不需要安裝或者構(gòu)建任何其他東西。最短的測試集只需要一個11行的html文件。

  Davis Frank: Jasmine是一個 JavaScript測試框架,目的是將BDD風(fēng)格引入JavaScript測試之中。至于區(qū)別嘛,我們的目標(biāo)是BDD(相比標(biāo)準(zhǔn)的TDD),因此我們盡 力幫助開發(fā)人員編寫比一般xUnit框架表達性更強,組織更好的代碼。此外我們還力圖減少依賴,這樣你可以在node.js上使用Jasmine,也可以在瀏覽器或移動程序中使用。

  Tommy Montgomery: Jarvis是一個JavaScript單元測試框架,API風(fēng)格基于.NET平臺上的NUnit。與其他測試框架的區(qū)別包括堆棧打印,帶顏色的字符串比較,以及可讀性更好的API。

  Felipe Nascimento: jfUnit的主要特點是它的加載方式和編寫方式。它需要更少的輸入,這讓你編寫單元測試更容易,而且可以在開發(fā)環(huán)境、控制臺或任何你需要的地方運行。 

  InfoQ: 能大概說一下項目的架構(gòu)么?主要的組件有哪些?

  Jörn Zaefferer: QUnit的API非常直觀: 調(diào)用test方法,傳入測試的名字和回調(diào)函數(shù),在回調(diào)函數(shù)中編寫測試代碼,其中包含一些斷言。QUnit還提供一些選項來組織測試,例如含有setup和teardown的模塊。在內(nèi)部這些調(diào)用被映射為隊列。根據(jù)執(zhí)行環(huán)境的不同,QUnit會在window.load或其他事件發(fā)生時(或者由用戶觸發(fā))開始執(zhí)行測試。當(dāng)某個測試需要異步執(zhí)行時,會等到測試執(zhí)行結(jié)束后再執(zhí)行下一條。測試的執(zhí)行順序是變化的: 這是一個可選的功能,默認會根據(jù)上一次執(zhí)行的結(jié)果重新排列執(zhí)行順序,但結(jié)果還是按照之前的順序顯示。如果你選擇隱藏已經(jīng)通過的測試,就可以重新運行所有失敗的測試,無需等待將全部測試都運行一遍的時間,可以更快知道這些測試是否被修復(fù)。

  Davis Frank: 我們盡量保持簡潔,Jasmine的核心只有一個JavaScript文件,它提供了一種領(lǐng)域?qū)S谜Z言來編寫測試。這種領(lǐng)域?qū)S谜Z言將測試組織為樹狀結(jié)構(gòu)并執(zhí)行。這個部分非常的簡單。

  在核心部分之上,還有一些用于在不同環(huán)境中顯示測試報告的功能,以及方便管理源文件和測試文件的功能。Jasmine可以在Ruby on Rails或任何Web框架中使用。還有些人用它在node.js環(huán)境中做開發(fā),任何使用JavaScript的地方,Jasmine都應(yīng)該能夠使用, 如果不能我們就要讓它變成可能。

  Tommy Montgomery: 和其他xUnit框架一樣,Jarvis也是基于約束的。每個斷言其實都在背后創(chuàng)建了一個約束對象,用來比較期待值和實際值。例如,當(dāng)運行Assert.that("foo", Is.equalTo("bar")); 時,會對左邊的“foo”和右邊的“bar”做等值比較。這個API(從NUnit借鑒而來)非常簡單易讀,我認為這在單元測試中是非常重要的。在使用方面,主要的組件是Assert對象、Is對象和執(zhí)行器。Assert暴露一組函數(shù)用于對值進行斷言,Is則體現(xiàn)了Jarvis基于約束的架構(gòu)。你可以通過調(diào)用Jarvis.run()并傳入測試函數(shù)來運行測試。Jarvis的測試報表是可配置的,內(nèi)置兩種報表方式:一種針對控制臺(比如FireFox中的Firebug),另一種則生成HTML。

  Felipe Nascimento: jfUnit是一個全局對象,你可以通過它來添加或刪除測試。寫好測試以后,這些測試并不會自動執(zhí)行,你需要顯式調(diào)用jfUnit的執(zhí)行方法,在控制臺或地址欄里都可以。我建議你在開發(fā)環(huán)境和測試環(huán)境中自動加載(測試庫本身和測試腳本),在生產(chǎn)環(huán)境中則要刪除。這么做可以讓你在任何地方執(zhí)行測試,并馬上在屏幕上得到結(jié)果。

  InfoQ: 開發(fā)人員剛開始使用你的框架時,怎么使用最好,典型的流程是怎樣的?

  Jörn Zaefferer: 網(wǎng)上有一篇很棒的文章introducing QUnit on Script Junkie - 覆蓋了對QUnit的基本介紹、大多數(shù)的API,以及一些讓你可以更高效的進行TDD的高級特性。

  Davis Frank: 有很多截屏視頻和教程。這個Railscasts的非常棒,PeepCode的CoffeeScript cast也不錯,雖然是關(guān)于CoffeeScript的,但Geoffrey同時也展示了如果使用Jasmine來做TDD。

  Tommy Montgomery: 最好的辦法是瀏覽Jarvis的網(wǎng)站,看看示例代碼,在網(wǎng)站上直接執(zhí)行一些測試,搞明白測試的寫法以及測試報告的樣式。Jarvis 本身的測試也是用Jarvis編寫的,你可以在這里查看測試結(jié)果。之后,你就可以下載整個框架,然后在項目中使用了。編寫測試的具體流程取決于開發(fā)人員,Jarvis對此沒有任何假設(shè)和約束。由于主要的測試運行器是基于HTML的,因此打開瀏覽器是必須的。我個人的工作流程是編寫代碼,然后編寫測試,刷新瀏覽器,查看測試結(jié)果,如此往復(fù)。

  Felipe Nascimento: 你可以在這里找到一些詳細的信息。基本上,開發(fā)人員需要加載這個庫,然后使用jfUnit對象來編寫測試。測試編寫完畢后,執(zhí)行jfUnit.run()來查看測試結(jié)果。你還可以用jfUnit.config({...})來設(shè)置一些參數(shù)或者環(huán)境變量。唯一我覺得需要特別提出的是,測試框架使用body元素來構(gòu)建測試報表,因此在頁面上必須要有body元素。

  InfoQ: 哪些特性是你希望將來能夠?qū)崿F(xiàn)的?對于JavaScript測試框架,未來的發(fā)展方向是怎么樣的?

  Jörn Zaefferer: 目前最重要的是能與命令行做更好的集成,比如在node.js里,你需要一個qunit.js之外的腳本,我們會通過npm發(fā)布。除此之外我們會集中精力改進現(xiàn)有的功能。可能最后會有一個BDD風(fēng)格的包裝,比如Pavlov。那時想用QUnit但是又喜歡BDD的人可以聯(lián)合使用Pavlov與QUnit。最后,不算是代碼上的功能,qunitjs.com會在年內(nèi)上線。

  Davis Frank: 在Pivotal Tracker上我們有一個公開的特性計劃表,你可以看到我們接下來的發(fā)布會包含哪些內(nèi)容。我們歡迎來自社區(qū)的任何貢獻者,但同時我們也很挑剔。我們希望能夠保持Jasmine精煉和緊湊。讓你的補丁和特性足夠簡潔,而且要包含相應(yīng)的測試。畢竟,Jasmine是一個測試框架,所以你最好用TDD的方式。

  Tommy Montgomery: 目前我在努力支持nodejs以便可以在服務(wù)器端編程中使用。以后可能會有一個ant task和一個控制臺的執(zhí)行程序。JavaScript測試框架對瀏覽器的依賴阻礙了自身(大多數(shù)情況下)。因此擺脫瀏覽器單獨使用對所有JavaScript單元測試框架都是必須的。JavaScript測試框架會更好的填補服務(wù)器端與客戶端測試之間空白。

  Felipe Nascimento:我非常喜歡JavaScript,我認為這種語言將會被大多數(shù)開發(fā)人員所使用。我喜歡JavaScript的表達方式,新工具以及新技術(shù)。我是BrazilJS(巴西JavaScript協(xié)會)的一員,我希望JavaScript擁有美好的前景。我很期待開發(fā)新功能,使這個測試工具將來可以讓測試Ajax更簡單,讓用戶編寫測試更簡單,讓測試圖形界面比如填寫表單、提交表單、點擊按鈕(目前已經(jīng)可以實現(xiàn),但是比較難寫)等更簡單。我還想說,如果你是一個開發(fā)人員,想要貢獻你的一分力量,請告訴我。請將你的批評、建議、想法、缺陷報告或者代碼通過我的github帳戶告訴我。

  座談嘉賓

  Jörn Zaefferer 居住在德國科隆,是一個自由職業(yè)的Web開發(fā)人員、咨詢師和培訓(xùn)師。他將 jQuery的測試套件演化為JavaScript測試框架QUnit,并且一直維護。他還創(chuàng)建并維護著大量流行的jQuery插件,作為jQuery UI開發(fā)組長,他關(guān)注最多的是新插件、新部件和新工具的開發(fā)。

  Davis Frank 生活在北加利福尼亞,他是一位軟件工程師、父親和棒球愛好者。目前他是Pivotal Labs的軟件工程師和經(jīng)理。業(yè)余時間,他喜歡和家人在一起,并確保家里的網(wǎng)絡(luò)保持99.9%暢通。

  Tommy Montgomery 擁有數(shù)學(xué)及計算機學(xué)士學(xué)位。早期工作于LAMP項目中,去年開始將主要精力放在.NET項目上。php、C#和JavaScript是他最感興趣的編程語言。近期參與的項目包括Sunlight - 客戶端語法高亮程序、Jarvis和Butterfly - 用.NETJavaScript編寫的markup到html的轉(zhuǎn)換程序。

  Felipe Nascimento de Moura 生活在巴西,是一位資深開發(fā)人員與系統(tǒng)分析師。他擁有7年Web開發(fā)經(jīng)驗,是很多開源項目的發(fā)起者,例如theWebMind.org、phpDevBar,以及jfUnit,還是巴西JavaScript協(xié)會BrazilJS的組織者之一。

  查看英文原文: Virtual Panel: State of the Art in JavaScript Unit Testing

it知識庫JavaScript 單元測試現(xiàn)狀,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 91麻豆精品福利在线观看 | 欧美婷婷色 | 国产1区在线观看 | 色中文在线 | 99这里只有精品6 | 激情五月五月婷婷 | 色在线观看视频 | 99精品福利 | 成人综合在线观看 | 播放久久国产乱子伦精品 | 五月婷婷激情 | 国产伦精品一区二区三区免费迷 | 欧美网站在线 | 国产国产成人久久精品杨幂 | 无遮挡一级毛片 | 亚洲视频毛片 | 在线综合亚洲欧美网站天堂 | 欧美图片在线观看 | 亚洲欧美激情在线 | 免费一区二区视频 | 色哟呦 | 91精品啪在线观看国产色 | 四虎久久精品国产 | 久久99国产精品久久99软件 | 一级做a级爰片性色毛片视频 | 久久久久琪琪去精品色村长 | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片图片 | 国产午夜免费视频片夜色 | 深夜一级毛片 | 成人免费午夜视频 | 草草草视频 | 女人夜色黄网在线观看 | 国产精品免费一区二区三区四区 | 精品一区二区三区免费观看 | 亚洲精品国产网红在线 | 精品国产免费久久久久久婷婷 | 日韩深夜视频 | 秋霞影音先锋一区二区 | 国产精品色婷婷在线观看 | 亚洲黄色在线网站 | 亚洲视频四区 |