Should.js 的中文打开方式

我对 @TJ 大神的崇拜已经到了盲目的程度,同事经常问我为什么跪着看代码。。。

Should.js 是什么

知之为知之,不知百度(谷歌)之,概括而言,Should.js 就是个断言库,这里就不详细介绍了。

Should.js 优势在哪

Should.js 非常语义化,如果会英文,就感觉是在写自然语言一样的写测试。

1
2
3
var should = require('should');

(5).should.be.exactly(5).and.be.a.Number();

确实非常方便,有人说甚至不懂代码的人也可以很容易的写几个简单的测试。当然我觉得至少要先会英文。
should 确实非常语义化,但是英文写着读着累,假如用中文写:

1
(5).应该.等于(5).并且.是.个.数字();

至少作为我们天朝程序员来说,读着非常顺畅。

中文化

其实 shouldjs 提供了所有接口,我们完全可以自定义这些东西,但是不同部分修改不同。
比如 be,and,a,have,is,it 这些只是简单的链或者叫别名,反正都是 be 的别名而已,文档里有说明的。
对了,顺便吐槽下 Should.js 的文档真是烂的一逼,当时我是完全看不懂,是看人家的例子才学会的。

经过测试,如下方法可以实现中文化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 中文化

Ending…

上面例子中,我只是简单修改了几个别名和属性,仅仅是抛砖引玉。
如果你确实感兴趣,可以翻下 Should.js 手册做全面汉化,甚至写成汉化插件。