Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在nodeunit中断言错误消息?_Node.js_Nodeunit - Fatal编程技术网

Node.js 如何在nodeunit中断言错误消息?

Node.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'); } 如果错误消息不是“某个复杂

我正在尝试编写断言来检查nodeunit中的错误消息。如果错误消息与我期望的不匹配,我希望测试失败。然而,API似乎并不适用于此。以下是我试图做的:

foo.js

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