單位使用摩卡和柴測試您的JavaScript
下面:
<!-- load your test files here -->
>添加了腳本後,您可以將測試跑者頁面加載到選擇的瀏覽器中。
測試結果
進行測試時,測試結果將看起來像這樣:
>
>請注意,我們輸入的描述及其功能顯示在輸出中 - 測試在描述下分組。請注意,還可以嵌套描述塊以創建進一步的子組。
>>讓我們看看一個失敗的測試的外觀。
>在測試中的行上說:
assert.equal(arr.length, 0);
>將數字0替換為1。這使得測試失敗,因為數組的長度不再匹配預期值。
如果您再次運行測試,則會在紅色中看到失敗的測試,並描述出了什麼問題。
>
測試的好處之一是它們可以幫助您更快地發現錯誤,但是此錯誤在這方面並不是很有幫助。我們可以修復它。
大多數斷言功能也可以採用可選消息參數。這是當斷言失敗時顯示的消息。使用此參數使錯誤消息易於理解是一個好主意。
>我們可以在我們的斷言中添加一條消息:
assert.equal(arr.length, 1, 'Array length was not 0');
如果您重新運行測試,則自定義消息將出現而不是默認。
>>讓我們將主張切換回原狀 - 用0替換1,然後再次運行測試以確保它們通過。
將其放在一起
到目前為止,我們已經研究了相當簡單的示例。讓我們將我們所學的知識付諸實踐,看看如何測試更現實的代碼。>
>這是一個將CSS類添加到元素的函數。這應該在一個新文件js/className.js。為了使其更有趣,我只有在該類不存在的元素類名稱屬性中才能添加一個新類 - 畢竟誰想看
function addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
在最好的情況下,我們將在
>之前為此功能編寫測試。我們編寫代碼。但是以測試驅動的開發是一個複雜的話題,就目前而言,我們只想專注於編寫測試。開始,讓我們回想一下單元測試背後的基本思想:我們給出某些輸入的功能,然後驗證功能的行為。那麼此功能的輸入和行為是什麼? 給出一個元素和一個類名稱:
- >如果元素的className屬性不包含類名稱,則應添加。 >
- 如果元素的className屬性確實包含類名稱,則不應添加。
>
<!-- load your test files here -->
>
但是,等等,測試功能在哪裡?好吧,當我們省略其第二個參數時,摩卡咖啡在測試結果中將這些測試標記為。這是設置許多測試的便捷方法 - 有點像您打算寫的待辦事項列表。 > 讓我們繼續實施第一個測試。
在此測試中,我們創建一個元素變量,並將其作為參數傳遞給AddClass函數,以及字符串測試類(要添加的新類)。然後,我們使用斷言將課程包含在值中。
>assert.equal(arr.length, 0);
>
>儘管此功能旨在與DOM元素一起使用,但我們在此處使用一個普通的JS對象。有時,我們可以以這種方式利用JavaScript的動態性質來簡化我們的測試。如果我們不這樣做,我們將需要創建一個實際元素,這將使我們的測試代碼複雜化。作為另一個好處,由於我們不使用DOM,因此我們也可以在Node.js中運行此測試。在瀏覽器中運行測試
要在瀏覽器中運行測試,您需要將className.js和classNametest.js添加到跑步者:
:>您現在應該看到一個測試通行證,另一種測試顯示為待處理,如以下Codepen所證明的那樣。請注意,代碼與示例略有不同,以使代碼在Codepen環境中起作用。
>請參閱codepen上的sitepoint(@sitepoint)的摩卡(1)的筆單元測試。
assert.equal(arr.length, 1, 'Array length was not 0');
>
>經常進行測試是一個很好的習慣,所以讓我們檢查一下如果我們現在進行測試會發生什麼。正如預期的那樣,它們應該通過。
這是另一個實施第二個測試的Codepen。
>function addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
但請堅持下去!我實際上有點欺騙你。我們尚未考慮此功能的第三個行為。該功能也有一個錯誤 - 相當嚴重的函數。這只是三行函數,但您注意到了嗎?
>>讓我們再為第三個行為寫一個測試,該行為將錯誤視為獎勵。
<!-- load your test files here -->
>請參閱codepen上的sitepoint(@sitepoint)的摩卡(3)的筆單元測試。
>讓我們修復功能並進行測試。
assert.equal(arr.length, 0);
>請參閱codepen上的sitepoint(@sitepoint)的摩卡(4)的筆單位測試。
在節點上運行測試
在節點中,僅在同一文件中的其他事物可見。由於className.js和classNametest.js在不同的文件中,我們需要找到一種將一個公開的方法。這樣做的標準方法是通過使用模塊。如果需要復習,則可以在此處閱讀所有內容:了解node.js
中的模塊和導出代碼基本上保持不變,但結構略有不同:
,如您所見,測試通過了。
assert.equal(arr.length, 1, 'Array length was not 0');
function addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
下一步是什麼?
如您所見,測試不必復雜或困難。就像編寫JavaScript應用程序的其他方面一樣,您也有一些重複的基本模式。一旦熟悉這些,您就可以一遍又一遍地使用它們。
,但這只是刮擦表面。關於單元測試還有很多要學習的內容。
>測試更複雜的系統
>
如何處理AJAX,數據庫和其他“外部”事物?- >測試驅動的開發
- 如果您想繼續學習此信息,我創建了一個免費的JavaScript單元測試QuickStart系列。如果您發現這篇文章有用,則絕對應該在此處查看。
- 另外,如果視頻更像是您的樣式,您可能對Sitepoint Premium的課程感興趣:Node.js. 中的測試驅動開發
經常詢問有關使用摩卡和柴的單位測試JavaScript的問題
>如何在JavaScript中安裝Mocha和Chai進行單位測試? >>要安裝Mocha和Chai,您需要在系統上安裝Node.js和NPM。一旦擁有這些,您可以使用NPM安裝摩卡和柴。打開終端並導航到您的項目目錄。然後,運行以下命令:
npm install -save-dev mocha chai
>此命令安裝摩卡和柴作為您項目的devDepentencies。 -save-dev標誌用於在您的軟件包中添加它們為開發依賴。 json文件。
>如何使用Mocha和Chai和Chai編寫基本測試?摩卡咖啡和柴涉及創建一個測試文件並在其中編寫測試案例。這是一個簡單的示例:
var Expect = require('chai')。期望;
descript('Basic Mocha string test',function(){
>期望('Hello') 。此示例,描述是一個測試套件,該套件將相關的測試分組,這是一個測試案例。 CHAI的期望功能用於主張預期的輸出。
>如何運行摩卡咖啡測試?
運行摩卡咖啡測試,導航到終端中的項目目錄並運行以下命令:
>此命令運行安裝在node_modules文件夾中的摩卡二進制二進制文件。如果您想簡單地將此命令作為摩卡咖啡運行,則可以使用NPM install -G Mocha在全球安裝摩卡樣式- 應該,期望和斷言。應該使用應有的屬性擴展每個對像以啟動鏈條。期望風格提供了一種更傳統的基於功能的方法。斷言風格提供了一種經典的,簡單的寫作方式。
>如何使用摩卡咖啡和Chai?
mocha和chai測試異步代碼,並提供了幾種測試異步代碼的方法。您可以使用回調,承諾或異步/等待。這是一個使用異步/等待的示例:
> it ('async test',async function(){
const result =等待myAsyncfunction();
> );
>
>如何在摩卡咖啡中使用鉤子?
摩卡咖啡提供類似以前,之後,之前和之後的鉤子,您可以用來設置先決條件並在測試後清理。這是一個示例:
describe('hooks',function(){
> function(function(){
//在此塊
}中進行第一個測試之前一次運行一次); //在此塊
}中進行最後一次測試後一次運行一次)此塊中的每個測試
});
aftereach(function(){
//在此塊中的每個測試之後運行
});
})
>如何測試Chai的異常?以下是一個示例:
it('拋出錯誤',function(){
> Expect(function(function(){thur new錯誤('錯誤值'})。to.throw( '錯誤('錯誤value');
>
>我如何使用間諜,存根和模擬與Mocha和Chai?間諜,存根和與摩卡咖啡和柴一起模擬,您可以使用Sinon.js之類的圖書館。 sinon.js可以輕鬆地與摩卡和柴一起集成以提供這些功能。
如何使用摩卡咖啡來生成測試報告?
,尼安等等。您可以在運行測試時指定與- Reporter選項一起使用的記者。例如,Mocha -ReporterNyan。>
以上是單位使用摩卡和柴測試您的JavaScript的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。
