断言模块

对于 XPCShell 测试和 mochitests,Assert 已经作为实例化的全局变量存在,您可以直接引用它 - 您不需要自己构造它。您可以立即开始使用 Assert.ok 和类似方法作为测试断言。

完整的类文档如下,但也许值得注意的是,此 API 与 NodeJS 的 assert 模块 在很大程度上相同,但有一些省略/更改,包括严格模式和字符串匹配。

class Assert(reporterFunc, isDefault)

此模块基于 CommonJS 规范

当您看到包含数字的 jsdoc 注释时,它指的是 CommonJS 规范的特定部分。

1. assert 模块提供了一些函数,当特定条件不满足时,这些函数会抛出 AssertionError。

要使用此模块,您可以先实例化它。

参数:
  • reporterFunc (reporterFunc) – 允许使用者覆盖此实例的报告。

  • isDefault (boolean) – 由测试套件用来将 reporterFunc 设置为全局实例使用的默认值,例如,其他仅限测试的模块会调用它。当报告器由内容脚本设置时,此值为 false,因为它们可能仍在父进程中运行。

Assert.ok(value, message)

4. 纯断言测试一个值是否为真值,由 !!guard 确定。assert.ok(guard, message_opt); 此语句等价于 assert.equal(true, !!guard, message_opt);。要严格测试 true 值,请使用 assert.strictEqual(true, guard, message_opt);

参数:
  • value (*) – 要评估为真值的测试主体。

  • message (String) – 预期结果的简短解释。

Assert.equal(actual, expected, message)

5. 等式断言测试使用 == 的浅层、强制等式。assert.equal(actual, expected, message_opt);

参数:
  • actual (*) – 要评估为与 expected 等价的测试主体。

  • expected (*) – 要针对 actual 评估的测试参考。

  • message (String) – 预期结果的简短解释。

Assert.notEqual(actual, expected, message)

6. 不等式断言测试两个对象是否使用 != 不相等。

参数:
  • actual (*) – 要评估为不与 expected 等价的测试主体。

  • expected (*) – 要针对 actual 评估的测试参考。

  • message (String) – 预期结果的简短解释。

示例

assert.notEqual(actual, expected, message_opt);
Assert.strictEqual(actual, expected, message)

9. 严格等式断言测试严格等式,由 === 确定。assert.strictEqual(actual, expected, message_opt);

参数:
  • actual (*) – 要评估为严格等价于 expected 的测试主体。

  • expected (*) – 要针对 actual 评估的测试参考。

  • message (String) – 预期结果的简短解释。

Assert.notStrictEqual(actual, expected, message)

10. 严格不等式断言测试严格不等式,由 !== 确定。assert.notStrictEqual(actual, expected, message_opt);

参数:
  • actual (*) – 要评估为不严格等价于 expected 的测试主体。

  • expected (*) – 要针对 actual 评估的测试参考。

  • message (String) – 预期结果的简短解释。

Assert.deepEqual(actual, expected, message)

7. 等价断言测试深度等价关系。assert.deepEqual(actual, expected, message_opt);

我们使用两个对象之间最精确的等价近似来检查,以最大程度地减少误报的可能性。JSON.stringify 不是为这个目的而设计的;对象可能具有模糊的 toJSON() 实现,这会影响测试。

参数:
  • actual (*) – 要评估为等价于 expected 的测试主体,包括嵌套属性。

  • expected (*) – 要针对 actual 评估的测试参考。

  • message (String) – 预期结果的简短解释。

Assert.notDeepEqual(actual, expected, message)

8. 非等价断言测试任何深度不等式。assert.notDeepEqual(actual, expected, message_opt);

参数:
  • actual (*) – 要评估为不等价于 expected 的测试主体,包括嵌套属性。

  • expected (*) – 要针对 actual 评估的测试参考。

  • message (String) – 预期结果的简短解释。

Assert.greater(lhs, rhs, message)

lhs 必须大于 rhs。assert.greater(lhs, rhs, message_opt);

参数:
  • lhs (Number) – 左侧值。

  • rhs (Number) – 右侧值。

  • message (String) – 比较结果的简短解释。

Assert.less(lhs, rhs, message)

lhs 必须小于 rhs。assert.less(lhs, rhs, message_opt);

参数:
  • lhs (Number) – 左侧值。

  • rhs (Number) – 右侧值。

  • message (String) – 比较结果的简短解释。

Assert.greaterOrEqual(lhs, rhs, message)

lhs 必须大于或等于 rhs。assert.greaterOrEqual(lhs, rhs, message_opt);

参数:
  • lhs (Number) – 左侧值。

  • rhs (Number) – 右侧值。

  • message (String) – 比较结果的简短解释。

Assert.lessOrEqual(lhs, rhs, message)

lhs 必须小于或等于 rhs。assert.lessOrEqual(lhs, rhs, message_opt);

参数:
  • lhs (Number) – 左侧值。

  • rhs (Number) – 右侧值。

  • message (String) – 比较结果的简短解释。

Assert.stringContains(lhs, rhs, message)

lhs 必须是一个包含 rhs 字符串的字符串。

参数:
  • lhs (String) – 要测试的字符串(干草堆)。

  • rhs (String) – 要查找的字符串(针)。

  • message (String) – 预期结果的简短解释。

Assert.stringMatches(lhs, rhs, message)

lhs 必须是一个与 rhs 正则表达式匹配的字符串。rhs 可以指定为字符串或 RegExp 对象。如果指定为字符串,它将被解释为正则表达式,因此如果您需要实际字符,请注意转义特殊字符,例如“?”或“(”。

参数:
  • lhs (String) – 要测试的字符串。

  • rhs (String|RegExp) – 字符串将与其一起测试的正则表达式。请注意,如果作为字符串传递,这将被解释为正则表达式。

  • message (String) – 比较结果的简短解释。

Assert.throws(block, expected, message)

11. 预期抛出错误:assert.throws(block, Error_opt, message_opt);

示例:`js // 以下代码将验证是否抛出了类型为TypeError的错误: Assert.throws(() => testBody(), TypeError); // 以下代码将验证是否抛出了错误,并且错误消息与“hello”匹配: Assert.throws(() => testBody(), /hello/); `

参数:
  • block (函数) – 要评估并捕获可能抛出的错误的函数。

  • expected (RegExp|函数) – 此参数可以是 RegExp 或函数。函数要么是错误类型的构造函数,要么是返回布尔值以描述测试结果的方法。

  • message (String) – 预期结果的简短解释。

Assert.rejects(promise, expected, message)

预期将被拒绝的 Promise:assert.rejects(promise, expected, message);

参数:
  • promise (Promise) – 预期将被拒绝的 Promise。

  • expected (?) – 用于评估拒绝结果的测试引用。

  • message (String) – 预期结果的简短解释。

Assert.report(failed, actual, expected, message, operator, truncate=true, stack)

3. 当不满足相应条件时,以下所有函数都必须抛出 AssertionError,如果未提供消息,则消息可能未定义。所有断言方法都将实际值和预期值提供给断言错误以用于显示目的。

根据规范,此 report 方法仅在断言失败时抛出错误,但此模块的使用者(例如:xpcshell-test、mochitest)可能希望覆盖此默认实现。

参数:
  • failed (布尔值) – 指示断言是否失败。

  • actual (*) – 评估断言的结果。

  • expected (*) – 测试作者的预期结果。

  • message (String) – 预期结果的简短解释。

  • operator (字符串) – 断言方法使用的操作限定符(例如:'==')。

  • truncate (布尔值) – 打印时是否应截断actualexpected

  • stack (nsIStackFrame) – 包括断言方法调用者的堆栈跟踪,如果无法自动推断(例如,由于异步回调)。

示例

// The following will report an assertion failure.
this.report(1 != 2, 1, 2, "testing JS number math!", "==");
Assert.setReporter(reporterFunc)

设置自定义断言报告处理程序函数。

参数:
  • reporterFunc (reporterFunc) – 报告处理程序函数。

示例

Assert.setReporter(function customReporter(err, message, stack) {
  if (err) {
    do_report_result(false, err.message, err.stack);
  } else {
    do_report_result(true, message, stack);
  }
});
static Assert.AssertionError(options)
  1. AssertionError 在 assert 中定义。

目前,规范仅使用和理解以下四个键。实现或子模块可以将其他键传递给 AssertionError 的构造函数 - 它们将被忽略。

示例

new assert.AssertionError({
  message: message,
  actual: actual,
  expected: expected,
  operator: operator,
  truncate: truncate,
  stack: stack, // Optional, defaults to the current stack.
});