我想让我的单元测试声明特定的函数调用在预期时特别抛出AssertionError,而不是它会抛出异常。断言库(expect)通过传递异常构造函数来支持这样的事情,但我似乎无法找到导出AssertionError构造函数的位置。它是否仅仅是一个内部课程而不是暴露给我们? The docs包含许多引用,但没有链接。
我有一种超级黑客的方式:
let AssertionError;
try {
const assert = require("assert");
assert.fail();
}
catch (ex) {
AssertionError = ex.constructor;
}
但我希望有更好的方法。
答案 0 :(得分:0)
在对Nodejs github repo进行研究后,我可以告诉你它在这里: https://github.com/nodejs/node/blob/c75f87cc4c8d3699e081d37bb5bf47a70d830fdb/lib/internal/errors.js
AssertionError的定义如下:
class AssertionError extends Error {
constructor(options) {
if (typeof options !== 'object' || options === null) {
throw new exports.TypeError('ERR_INVALID_ARG_TYPE', 'options', 'object');
}
var { actual, expected, message, operator, stackStartFunction } = options;
if (message) {
super(message);
} else {
if (actual && actual.stack && actual instanceof Error)
actual = `${actual.name}: ${actual.message}`;
if (expected && expected.stack && expected instanceof Error)
expected = `${expected.name}: ${expected.message}`;
if (util === null) util = require('util');
super(`${util.inspect(actual).slice(0, 128)} ` +
`${operator} ${util.inspect(expected).slice(0, 128)}`);
}
this.generatedMessage = !message;
this.name = 'AssertionError [ERR_ASSERTION]';
this.code = 'ERR_ASSERTION';
this.actual = actual;
this.expected = expected;
this.operator = operator;
Error.captureStackTrace(this, stackStartFunction);
}
}

如果我是你,我不会重新定义AssertionError,这非常非常hacky。我认为最好的办法是将该类扩展为MyAssertionError或创建一个双胞胎而不是扩展错误。
希望有所帮助!
答案 1 :(得分:0)
此处定义了断言错误类:
assert.AssertionError
*测试时可能很有用,AsserionError是预期的结果:
assert.throws( FunctionThatShouldThrow_AssertionError, assert.AssertionError )