链接具有副作用的成员变量,链不以函数结尾



在JavaScriptchaijs测试库中,可以像这样链接成员:

pm.expect (entry.NAME).to.be.a('string').that.is.not.empty;

这个问题不是关于测试库,而是关于库的内部技术。我知道它的工作原理是这样的:pm.expect是一个返回至少包含{ to: { be: { a } } }对象的函数,其中a是另一个返回至少{ that: { is: { not: { empty } } } }的函数。

有趣的是,empty显然不是一个函数。如果是这样,我将不得不这样称呼它:that.is.not.empty()(注意括号(。因此,链以一个不是函数的成员变量结束。

在 JavaScript 中,如何使用该成员变量来引起副作用?你能给我看一个最小的JS片段,它允许我用不是函数调用的东西(如empty;(结束表达式,并且仍然像函数调用一样?

function expect(value) {
return {
get empty() { return !value.length; },
};
}
expect("test").empty // false
expect("").empty // true

这是用一个getter完成的,看看ChaiJS源代码。

你能给我看一个最小的JS片段,它允许我用不是函数调用的东西(如空;(结束表达式,并且仍然像函数调用一样?

确定。一种方法是使用吸气剂:

const person = (name) => ({
get greet()   { return `Hello ${name}!`;   },
get dismiss() { return `Goodbye ${name}!`; }
});
console.log( person("Tyler").greet );
console.log( person("John").dismiss );

相关内容

最新更新