最近研究一下Chai, 发现其示例代码挺有意思的,就自己实现一下,
官方示例:
var expect = chai.expect;
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(tea).to.have.property('flavors')
.with.lengthOf(3);
简单实现上面代码功能:
const expect = (source, errMsg = 'Error') => {
const equal = (target) => {
if (source !== target) {
throw new Error(errMsg)
} else {
return {
to: to
}
}
}
const be = {
a (target) {
if (typeof source !== target) {
throw new Error(errMsg)
} else {
return {
to: to
}
}
}
}
const haveFactory = (source) => {
return {
lengthOf (target) {
if (source.length !== target) {
throw new Error(`${errMsg}: actual: ${source.length}, expect: ${target}`)
} else {
return {
with: this,
to: to
}
}
},
property (target) {
if (!source.hasOwnProperty(target)) {
throw new Error(errMsg)
} else {
return {
with: haveFactory(source[target]),
to: to
}
}
}
}
}
const to = {
equal,
be,
have: haveFactory(source, errMsg)
}
return { to }
}
const foo = 'bar'
const tea = {
flavors: 'abcd'
}
try {
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(tea).to.have.property('flavors').with.lengthOf(3);
} catch (error) {
console.log(error.message)
}
// output
// Error: actual: 4, expect: 3
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。