Node.js 如何在nodeunit中断言错误消息?
我正在尝试编写断言来检查nodeunit中的错误消息。如果错误消息与我期望的不匹配,我希望测试失败。然而,API似乎并不适用于此。以下是我试图做的: foo.jsNode.js 如何在nodeunit中断言错误消息?,node.js,nodeunit,Node.js,Nodeunit,我正在尝试编写断言来检查nodeunit中的错误消息。如果错误消息与我期望的不匹配,我希望测试失败。然而,API似乎并不适用于此。以下是我试图做的: foo.js function foo() { ... throw new MyError('Some complex message'); } foo.test.js testFoo(test) { test.throws(foo, MyError, 'Some complex message'); } 如果错误消息不是“某个复杂
function foo() {
...
throw new MyError('Some complex message');
}
foo.test.js
testFoo(test) {
test.throws(foo, MyError, 'Some complex message');
}
如果错误消息不是“某个复杂的消息”,我希望testFoo
失败,但它不是这样工作的。看起来“一些复杂的消息”只是一条解释测试失败的消息。它与断言无关。在nodeunit中执行此操作的最佳方法是什么?以下方法
可以接受[error]参数的函数。
函数接受actual
参数并返回true | false
,以指示断言的成功或失败
这样,如果您希望断言某个方法抛出了一个错误
,并且该错误包含一些特定的消息,那么您应该编写如下测试:
test.throws(foo, function(err) {
return (err instanceof Error) && /message to validate/.test(err)
}, 'assertion message');
例如:
function MyError(msg) {
this.message = msg;
}
MyError.prototype = Error.prototype;
function foo() {
throw new MyError('message to validate');
}
exports.testFooOk = function(test) {
test.throws(foo, function(actual) {
return (actual instanceof MyError) && /message to validate/.test(actual)
}, 'Assertion message');
test.done();
};
exports.testFooFail = function(test) {
test.throws(foo, function(actual) {
return (actual instanceof MyError) && /another message/.test(actual)
}, 'Assertion message');
test.done();
};
输出:
✔ testFooOk
✖ testFooFail
实际上,任何实现node.js assert模块功能的测试框架都支持这一点。例如:或谢谢。nodeUnitAPI中没有提到这一点。在检查代码之后,我还看到
[error]
可能是一个正则表达式。此正则表达式应用于错误消息。匹配表示成功。但是你的建议更好,因为它允许我同时检查这两种情况。
✔ testFooOk
✖ testFooFail