Javascript單元測試的基礎

n8765發表於2015-07-31
當你寫程式碼的時候,無論是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()轉換成原始型別再進行比較 


相關文章