我对 @TJ 大神的崇拜已经到了盲目的程度,同事经常问我为什么跪着看代码。。。
知之为知之,不知百度(谷歌)之,概括而言, Should.js 就是个断言库,这里就不详细介绍了。
Should.js 非常语义化,如果会英文,就感觉是在写自然语言一样的写测试。
var should = require('should');
(5).should.be.exactly(5).and.be.a.Number();
确实非常方便,有人说甚至不懂代码的人也可以很容易的写几个简单的测试。当然我觉得至少要先会英文。should 确实非常语义化,但是英文写着读着累,假如用中文写:
(5).应该.等于(5).并且.是.个.数字();
至少作为我们天朝程序员来说,读着非常顺畅。
其实 shouldjs 提供了所有接口,我们完全可以自定义这些东西,但是不同部分修改不同。
比如 be,and,a,have,is,it
这些只是简单的链或者叫别名,反正都是 be
的别名而已,文档里有说明的。
对了,顺便吐槽下 Should.js 的文档真是烂的一逼,当时我是完全看不懂,是看人家的例子才学会的。
经过测试,如下方法可以实现中文化。
var should = require('should');
var Assertion = require('should/lib/assertion');
should.extend('应该', Object.prototype); // should 别名
['是', '个', '并且'].forEach(function(name) { // 属性别名
Assertion.addChain(name);
});
// 方法别名
Assertion.alias('equal', '等于');
Assertion.alias('Number', '数字');
Assertion.alias('String', '字符串');
// 测试例子
(5).应该.等于(5).并且.是.个.数字();
'5'.应该.等于('5').并且.是.个.字符串();
console.log('完成!');
测试结果如下:
上面例子中,我只是简单修改了几个别名和属性,仅仅是抛砖引玉。如果你确实感兴趣,可以翻下 Should.js 手册做全面汉化,甚至写成汉化插件。