我需要在ES6中实现我自己的错误类(使用节点v4):
class QueryObjectError {
constructor (message) {
this.message = message;
}
}
我有一部分代码会抛出错误类型:
function myFunct () {
throw new QueryObjectError('a message');
}
我正在使用Mocha和Chai来测试函数是否会抛出预期的错误和预期的消息:
it('is a test', function (done) {
var err = new QueryObjectError('abc');
assert.throw(myFunct, err);
done();
});
尽管QueryObjectError
对象具有不同的消息,但测试仍然通过,我想测试检查深度相等的情况。有没有办法用给定的工具解决这个问题?
答案 0 :(得分:1)
您的代码存在两个突出问题:
您未正确使用assert.throw
。您应该将构造函数作为第二个参数传递给预期的异常,将正则表达式或字符串作为第三个参数传递。如果第3个参数是字符串,Chai将检查该字符串是否存在于异常消息中。如果它是正则表达式,它将测试消息是否与表达式匹配。
您的异常应该有toString
方法返回消息,否则Chai将不知道如何查看消息。
以下是一个显示失败和成功的示例:
import { assert } from "chai";
class QueryObjectError {
constructor (message) {
this.message = message;
}
toString() {
return this.message;
}
}
function myFunct () {
throw new QueryObjectError('a message');
}
it('is a test', function () {
assert.throw(myFunct, QueryObjectError, 'abc');
});
it('is another test', function () {
assert.throw(myFunct, QueryObjectError, /^a message$/);
});