2

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

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

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

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

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

4

2 回答 2

3
  function expect(value) {
      return {
         get empty() { return !value.length; },
      };
  }

 expect("test").empty // false
 expect("").empty // true

这是通过getter完成的,请查看ChaiJS 源代码

于 2019-08-19T13:34:24.710 回答
3

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

当然。一种方法是使用getter

const person = (name) => ({
  get greet()   { return `Hello ${name}!`;   },
  get dismiss() { return `Goodbye ${name}!`; }
});

console.log( person("Tyler").greet );
console.log( person("John").dismiss );

于 2019-08-19T13:34:40.397 回答