背景
为了研究与学习某些测试框架的工作原理,同时也为了完成培训中实现一个简单的测试框架的原因,我对should.js的代码进行了学习与分析,现在与大家来进行交流下。
之前是放在segmentfault上面的,现在往掘金上面也同步一份。
目录
-
ext
-
assertion.js
-
assertion-error.js
-
config.js
-
should.js
-
util.js
其中ext
为文件夹,其余为js文件。
结构
其中should.js
为整个项目入口,asssertion.js
为should.js中的类,负责对测试信息进行记录。assertion-error.js
为should.js定义了一个错误类,负责存储错误信息。config.js
中存储了一些should.js中的一些配置信息。util.js
中则定义了一些项目中常用的工具函数。
should.js
var should = function should(obj) {
return (new should.Assertion(obj));
};
should.AssertionError = require('./assertion-error');
should.Assertion = require('./assertion');
should.format = util.format;
should.type = require('should-type');
should.util = util;
should.config = require('./config');
exports = module.exports = should;
should.js
入口文件初始化了一个类,并将所有文件中其他的模块进行引入。同时将自己export出去,让自己能够被require到。
should.extend = function (propertyName, proto) {
propertyName = propertyName || 'should';
proto = proto || Object.prototype;
var prevDescriptor = Object.getOwnPropertyDescriptor(proto, propertyName);
Object.defineProperty(proto, propertyName, {
set: function () {
},
get: function () {
return should(util.isWrapperType(this) ? this.valueOf() : this);
},
configurable: true
});
return {
name: propertyName, descriptor: prevDescriptor, proto: proto};
};
should.js
自身定义了一个extend方法,用于兼容should.js的另一种调用方式,即should(obj)
的方式等于