如何断言nodeunit中的错误消息?
How to assert on error message in 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');
}
如果错误消息是 而不是 'Some complex message',我希望 testFoo
失败,但事实并非如此。似乎 'Some complex message' 只是一条解释测试失败的消息。它不涉及断言。在 nodeunit 中执行此操作的最佳方法是什么?
下面的方法nodeunit API
throws(block, [error], [message]) - Expects block to throw an error.
可以为[error]参数接受一个函数。
该函数采用 actual
参数和 returns true|false
来指示断言的成功或失败。
这样,如果您希望断言某些方法抛出 Error
并且该错误包含某些特定消息,您应该编写如下测试:
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 模块功能的测试框架都支持它。例如:node.js assert or Should.js
我正在尝试编写断言来检查 nodeunit 中的错误消息。如果错误消息与我的预期不符,我希望测试失败。但是,似乎 API 不存在。这是我正在尝试做的事情:
foo.js
function foo() {
...
throw new MyError('Some complex message');
}
foo.test.js
testFoo(test) {
test.throws(foo, MyError, 'Some complex message');
}
如果错误消息是 而不是 'Some complex message',我希望 testFoo
失败,但事实并非如此。似乎 'Some complex message' 只是一条解释测试失败的消息。它不涉及断言。在 nodeunit 中执行此操作的最佳方法是什么?
下面的方法nodeunit API
throws(block, [error], [message]) - Expects block to throw an error.
可以为[error]参数接受一个函数。
该函数采用 actual
参数和 returns true|false
来指示断言的成功或失败。
这样,如果您希望断言某些方法抛出 Error
并且该错误包含某些特定消息,您应该编写如下测试:
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 模块功能的测试框架都支持它。例如:node.js assert or Should.js