Javascript單元測試的基礎
當你寫程式碼的時候,無論是JS程式碼或其他程式語言是否正常工作是一件你需要關注的事情。你寫了一個程式碼片段,想讓它能像預想的一樣工作,沒有任何差別,這就是為什麼你要寫那段程式碼。想象一下,當你已經寫了差不多幾千行程式碼時,你能保證它能夠正常工作嗎?答案是不一定吧。
單元測試能夠讓你寫的程式碼按照你之前預想的方式工作。
那麼,究竟什麼是單元測試?
維基百科上對於單元測試的定義是這樣的:
單元測試是針對個別單元、一個或多個關聯了控制元件資料的計算機程式模組、使用程式或執行程式進行正確性檢驗的測試方法。
我不知道你是否看懂了,反正我是沒懂。這就是為什麼我有我自己的對於它的定義:
單元測試是一個可以用它來對程式碼塊進行執行結果驗證的方法。
到現在,我希望你能清楚單元測試是什麼,同時知道它對於寫程式碼是多麼有用!
太多關於單元測試的定義了,到底怎麼做
好吧,言歸正傳——怎麼進行單元測試呢?
我們到底應該測試什麼?
對於Javascript來說,我們應該測試的是操作結束後是否返回期望的結果。經常測試的內容如下:
1.方法的返回值
2.DOM節點的屬性
3.區域性變數的值
事實上,Js中的所有內容都能被測試,而且很簡單。
怎麼測試?
目前已經有很多測試的方法,甚至已經有一些框架像Jasmine和Quint,他們都可以讓測試更簡單。但至於現在,讓文章更加簡單(我是原生javascript的腦殘粉),我將不會使用單元測試框架。我會寫一個名叫”assert”的簡單方法作為替代,它將在接下來的文章中被用到。
/**
* Simple assertionfunction
*
* @param {Any} objThe first object
* @param {Any} anoThe object totestagainst
* @return {Bool}If obj is exactly equal to ano
*/
function assert (obj, ano) {
return bj === ano;
}
|
多麼簡單的一個方法,是不?我還為你寫了文件,以便你能輕易的理解它。那麼現在我們已經有了幹活的主要工具,讓我們把它用起來吧。
測試程式碼
為了讓文章更簡單(其實是我懶得寫),我將測試一些超簡單的程式碼。我不會做有關DOM操作的測試,雖然那很簡單(為節點設定屬性,檢查它是否設定成功),僅僅是因為我不想在此文中解決瀏覽相關的問題。
首先,在測試之前,我將寫點程式碼。但寫啥呢?寫一個簡單的add方法,它能實現兩個數字相加。在此之前我將對這個方法的執行做一些預期:
1.它將接受兩個輸入引數,將它們相加,返回結果
2.如果輸入引數數量不正確,它應該報錯程式碼真的很簡單,相信我!程式碼如下:
/**
* Add two numbers
*
* @param {Number} n1 The first number
* @param {Number} n2 The second number
* @return {Number} Sum of n1 and n2
*/
function add (n1, n2) {
// arguments is an array of arguments passed
// So, arguments.length is the number of arguments
if (arguments.length !== 2) {
throw new Error ();
}
return n1 + n2;
}
|
現在,我們需要測試它是否會按預期來執行。
assert(add(1, 4), 5) // true
assert(add(45,34,80)) // false
|
恭喜!你已經學會了如何對你的程式碼進行單元測試。我已經講述了JS中關於單元測試的大部分基礎的東西,但仍有很多內容需要學習。但這篇文章僅僅是基礎!
我為各位讀者準備了一些作業:
1.寫一個方法,可以判斷一個值小於另一個值。同樣的,寫另一個方法,判斷該值大於另一個值
2.寫一些方法來判斷,一個物件是否是
· Object
· String
· Function
· Boolean
===操作符:
要是兩個值型別不同,返回false
要是兩個值都是number型別,並且數值相同,返回true
要是兩個值都是stirng,並且兩個值的String內容相同,返回true
要是兩個值都是true或者都是false,返回true
要是兩個值都是指向相同的Object,Arraya或者function,返回true
要是兩個值都是null或者都是undefined,返回true
==操作符:
如果兩個值具有相同型別,會進行===比較,返回===的比較值
如果兩個值不具有相同型別,也有可能返回true
如果一個值是null另一個值是undefined,返回true
如果一個值是string另個是number,會把string轉換成number再進行比較
如果一個值是true,會把它轉成1再比較,false會轉成0
如果一個值是Object,另一個是number或者string,會把Object利用 valueOf()或者toString()轉換成原始型別再進行比較
相關文章
- 單元測試基礎
- 軟體測試基礎 (一): 單元測試
- 軟體測試基礎 (一):單元測試
- Vue 應用單元測試的策略與實踐 02 - 單元測試基礎Vue
- JavaScript單元測試框架JavaScript框架
- sinon.js基礎使用教程—單元測試JS
- sinon.js基礎使用教程---單元測試JS
- JavaScript單元測試及原理JavaScript
- JavaScript單元測試工具VenusJavaScript
- 單元測試:單元測試中的mockMock
- 使用 QUnit 進行 JavaScript 單元測試JavaScript
- 測試 之Java單元測試、Android單元測試JavaAndroid
- JavaScript 測試教程-part 1:用 Jest 進行單元測試JavaScript
- javascript單元測試框架mochajs詳解JavaScript框架JS
- 『心善淵』Selenium3.0基礎 — 25、unittest單元測試框架框架
- 用Venus.js給JavaScript做單元測試JSJavaScript
- [iOS單元測試系列]單元測試編碼規範iOS
- Flutter 單元測試Flutter
- Go單元測試Go
- 單元測試工具
- iOS 單元測試iOS
- 前端單元測試前端
- golang 單元測試Golang
- PHP 單元測試PHP
- phpunit單元測試PHP
- JUnit單元測試
- unittest單元測試
- Junit 單元測試.
- 單元測試真
- java中的單元測試Java
- Android單元測試-對Activity的測試Android
- Android單元測試-對View的測試AndroidView
- 前端測試:Part II (單元測試)前端
- javascript單元測試框架mocha 和 斷言庫 assertJavaScript框架
- 程式碼重構與單元測試——重構1的單元測試(四)
- Vue 應用單元測試的策略與實踐 04 - Vuex 單元測試Vue
- 如何用 JavaScript 編寫你的第一個單元測試JavaScript
- IBM主機系列課程之單元測試(基礎篇)視訊教程IBM