Javascript 断言库 - chai 与检查类型

Javascript assertion libraries - chai vs check-types

我在 NPM 中看到两个流行的库 - chai 和 check-types。我试图了解他们的预期目的。

我知道chai是用来做单元测试TDD/BDD风格的,有丰富的断言库

另一方面,

check-types (https://github.com/philbooth/check-types.js) 只是一个断言库,用于检查参数的类型是否正确。这看起来不像是要用于单元测试。我假设这将在我的 Javascript 函数中使用,以确保传递给函数的参数类型是预期的类型。

所以如果 chai 已经支持丰富的断言库,那么问题是检查类型库是多余的吗?或者它们意味着不同的用途?我是否也可以在我的代码中(在我的测试之外)使用 chai 来检查变量的类型是否正确?

正如您已经正确假设的那样,这里有两种不同的用例:

chai 是一个仅用于测试的断言库 - 因此在普通应用程序中它没有以任何方式优化到 运行。没有它的精简版本,要求它为您带来大量库代码,用于不同可能性的测试样式(shouldexpectassert)。最重要的是:如果断言的条件 满足,chai 将立即抛出一个特殊的 AssertionError ,该 AssertionError 旨在由流行的测试工具处理,如 KarmaMocha.

另一方面,

check-types 只是为了让应用程序中的类型和值检查更容易和更易读 .在大多数情况下,它让您决定在不满足断言(不抛出)时要做什么。

结论:

虽然你当然可以在测试之外使用 chai,但我绝对不会推荐它,因为它只会增加你的构建的大小,有很多未使用的方法,你需要一个 try{} catch(){} 块围绕每个断言。

虽然您可以使用 check-types 进行测试,但您需要自己为每个测试抛出 AssertionErrors(这很烦人)。

所以:不,两个库的 none 都是多余的。您可以将 chai 视为库的一种超集,例如 check-typeschai 本身使用它自己的类型检测库 type-detect(我是其中的维护者之一;)))利用它们在测试工具中使用。