gpt4 book ai didi

node.js - 如何断言nodeunit中的错误消息?

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:19 25 4
gpt4 key购买 nike

我正在尝试编写断言来检查 Node 单元中的错误消息。如果错误消息与我的预期不符,我希望测试失败。但是,似乎不存在用于此目的的 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 中执行此操作的最佳方法是什么?

最佳答案

以下方法nodeunit API

throws(block, [error], [message]) - Expects block to throw an error.

可以接受[error]参数的函数。该函数采用 actual 参数并返回 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 断言模块功能的测试框架都支持这一点。例如:node.js assertShould.js

关于node.js - 如何断言nodeunit中的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34327385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com