Chai 是一个 JavaScript 的断言库,用于易于阅读地编写测试代码。它提供了很多表达式来支持各种类型的断言,其中包括 not.to.exist 和 to.not.exist。虽然这两个表达式似乎有些相似,但实际上它们之间存在着一些微妙的区别。
not.to.exist
not.to.exist 是 Chai 中的一个成员方法,它可以用于判断给定的值不存在。例如,在使用 Mocha 进行单元测试时,我们可能会这样使用它:
const expect = require('chai').expect; const myUndefinedVar = undefined; it('should not exist', () => { expect(myUndefinedVar).to.not.exist; });
在上面的例子中,我们期望 myUndefinedVar 不应该存在,这样测试才能通过。如果 myUndefinedVar 存在,那么 expect 函数就会抛出 AssertionError。
to.not.exist
to.not.exist 与 not.to.exist 很相似,但是它们之间仍然有所不同。to.not.exist 是一种更为严谨的断言形式,因为它强调了“存在”这个问题,并且推断了一个默认的期望值。举个例子:
const expect = require('chai').expect; const myNullVar = null; it('should not exist', () => { expect(myNullVar).to.not.exist; });
在这个例子中,我们也期望 myNullVar 不应该存在,但是与 not.to.exist 不同的是,to.not.exist 还默认期望 myNullVar 为 undefined。因此,如果 myNullVar 不是 undefined 的话,expect 函数就会抛出 AssertionError。
例子
为了更好地理解这两个表达式之间的区别,我们可以通过一个例子来进一步说明:
-- -------------------- ---- ------- ----- ------ - ----------------------- ----- -------------- - ---------- ----- --------- - ----- ----- ------------ - --- ---------- --- ------- -- -- - -- -- ------------ -- ------------------------------------ ------------------------------- -- -- ------------ -- ------------------------------------ ------------------------------- ------------------------------------- -- --------------- - ---------------------- -- -------- ----------------- -------------- --- --------- ------------------------------------------- ---
在上面的例子中,我们使用 not.to.exist 和 to.not.exist 进行了测试。我们可以看到,使用 not.to.exist,我们可以判断 undefined 和 null 是否存在,但是它并没有默认期望值。而使用 to.not.exist,则更加严谨,不仅可以判断 undefined 和 null 是否存在,还可以确定它们的默认期望值是否符合预期。
结论
尽管 not.to.exist 和 to.not.exist 看起来非常相似,但是它们之间存在微妙的区别。to.not.exist 是一种更为严谨的断言形式,推断出默认的期望值并进行判断。而 not.to.exist 只是简单地判断给定的值是否存在。
在编写测试代码时,我们需要根据具体的情况选择合适的断言形式,以保证测试代码的严谨性和准确性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671b21e69babaf620fa85daf