Chai这样的断言库如何在不强制调用函数的情况下工作

How do assertion libraries such as Chai work without forcing a call to a function?

本文关键字:调用 函数 情况下 工作 断言 Chai      更新时间:2023-09-26

在Chai中,您可以执行以下操作:

expect({}).to.exist;

exist不是一个函数调用,但它在测试框架中仍然有效。相反(expect({}).to.not.exist)会导致测试失败,但exist不是函数调用。

在不让我调用函数的情况下,这些断言如何工作?事实上,如果我试着说expect({}).to.exist(),测试失败了,因为exist不是一个函数。

我找到了它(或者至少,我找到了一个方法)。使用JavaScript getters:

var throws = {
  get a() {
    throw new Error('a');
  },
  get b() {
    throw new Error('b');
  },
  get c() {
    throw new Error('c');
  }
};

执行throws.athrows.bthrows.c时,将抛出相应的错误。

从这一点来看,建立柴的断言是相当容易的。