8.断言 API

原文: http://exploringjs.com/impatient-js/ch_assertion-api.html

8.1。软件开发中的断言

在软件开发中, 断言 语句关于必须为真的代码值或代码段的事实。如果不是,则抛出异常。 Node.js 通过其内置模块assert支持断言。例如:

该断言表明 3 加 5 的预期结果为 8. import 语句使用 assert推荐的strict版本

8.2。本书中如何使用断言

在本书中,断言以两种方式使用:在代码示例中记录结果并实现测试驱动的练习。

8.2.1。通过断言记录代码示例中的结果

在代码示例中,断言表达了预期的结果。举例来说,以下功能:

id()返回其参数。我们可以通过断言来显示它:

在示例中,我通常省略导入assert的语句。

使用断言的动机是:

  • 您可以精确指定预期的内容。
  • 代码示例可以自动测试,这可以确保它们真正起作用。

8.2.2。通过断言实现测试驱动的练习

本书的练习是通过测试框架mocha进行测试驱动的。测试内部的检查是通过assert的方法进行的。

以下是此类测试的示例:

有关更多信息,请参阅关于测验和练习的章节。

8.3。正常比较与深度比较

strict equal()使用===来比较值。因此,一个对象只等于它自己 - 即使另一个对象具有相同的内容(因为===不比较对象的内容,只比较它们的身份):

deepEqual()是比较对象的更好选择:

此方法也适用于数组:

8.4。快速参考:模块assert

有关完整文档,请参阅 Node.js 文档

8.4.1。正常的平等

  • function equal(actual: any, expected: any, message?: string): void

    actual === expected必须是true。如果不是,则抛出AssertionError

  • function notEqual(actual: any, expected: any, message?: string): void

    actual !== expected必须是true。如果不是,则抛出AssertionError

可选的最后一个参数message可用于解释断言的内容。如果断言失败,则消息用于设置抛出的AssertionError

8.4.2。深刻的平等

  • function deepEqual(actual: any, expected: any, message?: string): void

    actual必须与expected完全相同。如果不是,则抛出AssertionError

  • function notDeepEqual(actual: any, expected: any, message?: string): void

    actual不得与expected深度相等。如果是,则抛出AssertionError

8.4.3。期待异常

如果你想(或期望)接收异常,你需要throws():这个函数调用它的第一个参数,函数block,只有在它抛出异常时才会成功。其他参数可用于指定该异常必须是什么样的。

  • function throws(block: Function, message?: string): void

  • function throws(block: Function, error: Function, message?: string): void

  • function throws(block: Function, error: RegExp, message?: string): void

  • function throws(block: Function, error: Object, message?: string): void

8.4.4。另一个工具功能

  • function fail(message: string | Error): never

    调用时始终抛出AssertionError。这有时对单元测试很有用。

8.断言 API - 图1 测验

参见测验应用程序