Chai JS 如何使函数括号可选?
How does Chai JS make function parentheses optional?
我指的是测试断言库:http://chaijs.com/api/bdd/#false
您可以像下面这样编写语言链断言:
expect(false).to.be.false;
expect() 明显是一个全局函数,"to.be" 看起来是两个属性,但是最后一部分"false" 是怎么工作的。我希望它必须是一个函数调用:
expect(false).to.be.false();
这是 2015 ES 语法吗?我似乎无法在 https://github.com/lukehoban/es6features
中找到对它的引用
Stack Overflow 说这是不可能的:How to implement optional parentheses during function call? (function overloading)
任何人都可以阐明这样的事情是如何实施的吗?
源代码:https://github.com/chaijs/chai/blob/master/lib/chai/core/assertions.js#L281
您可以使用 Object.defineProperty
执行此操作(以及许多其他操作)。这是一个基本示例:
// our "constructor" takes some value we want to test
var Test = function (value) {
// create our object
var testObj = {};
// give it a property called "false"
Object.defineProperty(testObj, 'false', {
// the "get" function decides what is returned
// when the `false` property is retrieved
get: function () {
return !value;
}
});
// return our object
return testObj;
};
var f1 = Test(false);
console.log(f1.false); // true
var f2 = Test("other");
console.log(f2.false); // false
您可以使用 Object.defineProperty
做更多事情。您应该查看 the MDN docs for Object.defineProperty
了解详情。
我指的是测试断言库:http://chaijs.com/api/bdd/#false
您可以像下面这样编写语言链断言:
expect(false).to.be.false;
expect() 明显是一个全局函数,"to.be" 看起来是两个属性,但是最后一部分"false" 是怎么工作的。我希望它必须是一个函数调用:
expect(false).to.be.false();
这是 2015 ES 语法吗?我似乎无法在 https://github.com/lukehoban/es6features
中找到对它的引用Stack Overflow 说这是不可能的:How to implement optional parentheses during function call? (function overloading)
任何人都可以阐明这样的事情是如何实施的吗?
源代码:https://github.com/chaijs/chai/blob/master/lib/chai/core/assertions.js#L281
您可以使用 Object.defineProperty
执行此操作(以及许多其他操作)。这是一个基本示例:
// our "constructor" takes some value we want to test
var Test = function (value) {
// create our object
var testObj = {};
// give it a property called "false"
Object.defineProperty(testObj, 'false', {
// the "get" function decides what is returned
// when the `false` property is retrieved
get: function () {
return !value;
}
});
// return our object
return testObj;
};
var f1 = Test(false);
console.log(f1.false); // true
var f2 = Test("other");
console.log(f2.false); // false
您可以使用 Object.defineProperty
做更多事情。您应该查看 the MDN docs for Object.defineProperty
了解详情。