多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
糟糕,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中最小的单元—函数。类似这样的事您可能干过很多次,但没有意识到其实这就是单元测试。 这里,我们自动化了生成测试对象并调用它们函数的这个过程,但是这显然还不够好,因为我们仍然需要手工检查哪些调用是没问题的,哪些是有问题的。要让单元测试实现真正的自动化,它还需要拥有自我检查的能力。