糟糕,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中最小的单元—函数。类似这样的事您可能干过很多次,但没有意识到其实这就是单元测试。
这里,我们自动化了生成测试对象并调用它们函数的这个过程,但是这显然还不够好,因为我们仍然需要手工检查哪些调用是没问题的,哪些是有问题的。要让单元测试实现真正的自动化,它还需要拥有自我检查的能力。