断言模块¶
对于 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 (布尔值) – 打印时是否应截断
actual
和expected
。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)¶
AssertionError 在 assert 中定义。
目前,规范仅使用和理解以下四个键。实现或子模块可以将其他键传递给 AssertionError 的构造函数 - 它们将被忽略。
示例
new assert.AssertionError({ message: message, actual: actual, expected: expected, operator: operator, truncate: truncate, stack: stack, // Optional, defaults to the current stack. });