糟糕,Firebug會話顯示了不少strftime問題。這就意味著我們必須調查并重新運行測試來驗證它的工作正常。那就得做更多的手工勞動。其實這可以有更好的辦法:首先,讓我們生成一個很小的HTML頁面,用以加載源腳本和一個加了測試代碼的腳本,以便檢查我們所做改變的結果,而不用重新把測試輸入一遍。該HTML的測試頁面如清單1.4所示。
清單1.4 HTML測試頁
~~~
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Date.prototype.strftime test</title>
<meta http-equiv="content-type"
content="text/html;charset=utf-8">
</head>
<body>
<script type="text/javascript"src="../src/strftime.js">
</script>
<script type="text/javascript"src="strftime_test.js">
</script>
</body>
</html>
~~~
接著,我們把之前控制臺的會話內容拷貝到一個新文件中,如清單1.5所示,并將其用做測試文件。在代碼中,為了記錄結果,我們只要調用console.log函數即可,它在絕大部分的現代瀏覽器中都有,并記錄在瀏覽器的JavaScript控制臺中。
清單1.5 strftime_test.js
~~~
var date =new Date(2009,11,5);
console.log(date.strftime("%Y"));
console.log(date.strftime("%m"));
console.log(date.strftime("%d"));
console.log(date.strftime("%y"));
console.log(date.strftime("%F"));
~~~
現在,我們有了一個可以重現的測試用例。接下來,可以處理故障了:這個故障的問題在于“%y”沒有把返回的數值添上0。原因是我們忘了在方法外面加上zeroPad()調用。在清單1.6中我們修改了Date.formats.y方法。
清單1.6 把年份添上0
~~~
Date.formats ={
//...
y:function (date){
return zeroPad(date.getYear()%100);
}
//...
};
~~~
現在,我們可以馬上在瀏覽器中重新運行測試文件,檢查控制臺來確認我們的改動解決了“y”格式說明符的問題。簡而言之,我們編寫了一個單元測試。針對的是JavaScript中最小的單元—函數。類似這樣的事您可能干過很多次,但沒有意識到其實這就是單元測試。
這里,我們自動化了生成測試對象并調用它們函數的這個過程,但是這顯然還不夠好,因為我們仍然需要手工檢查哪些調用是沒問題的,哪些是有問題的。要讓單元測試實現真正的自動化,它還需要擁有自我檢查的能力。