我正在开发一个 JavaScript 项目,并且正在努力通过最终的单元测试,该测试实质上是检查如果给定的输入无效,我的函数是否会引发错误。对于某些背景,它是一个处理用户权限的函数,并且可以在给定某些先决条件的情况下检查是否可以授予或拒绝某些权限。
我可以通过有关函数输出的所有测试,但在错误处理方面遇到了麻烦。我被告知我没有抛出错误,尽管多次检查自己确实抛出了错误。我将附上图片以尽可能地说明问题。
首先,我试图抛出的错误对象定义如下:
function InvalidBasePermissionsError() {
this.name = 'InvalidBasePermissionsError';
this.message = "Invalid Base Permissions";
this.stack = Error().stack;
}
InvalidBasePermissionsError.prototype = Object.create(Error.prototype);
我的错误抛出测试失败的功能如下:
PermissionDependencyResolver.prototype.canDeny = function (existing, permToDeny) {
try {
if (!pdr.checkValid(existing)) {
throw new InvalidBasePermissionsError;
}
else {
var tempArr = existing
var required = [];
for (var i = 0; i < tempArr.length; i++) {
var current_dependency = this.adjList[existing[i]];
required.push.apply(required, current_dependency)
};
if (required.includes(permToDeny)) {
return false;
} else {
return true;
}
}
}
catch (e) {
console.log(e.message)
}
};
奇怪的是,当我控制台记录功能如下:
pdr.canDeny(['create', "delete"], 'audit')
我得到了正确的字符串“Invalid Base Permissions”打印到控制台,见 image1 .更奇怪的是,当我运行测试时,我可以看到同样的错误消息直接记录在“测试失败”消息的上方,这似乎是矛盾的,见 image 2 . Mocha(测试框架)是否有可能没有接受我的错误处理?还是我在函数中犯了错误并且没有正确抛出错误?
有问题的测试如下:
it('throws an exception when validating permissions if existing permissions are invalid', function(){
pdr = new PermissionDependencyResolver(complexPermissionDependencies)
expect(function () { pdr.canGrant(['edit', 'create'], 'alter_tags') }).toThrowError("Invalid Base Permissions")
expect(function () { pdr.canGrant(['view', 'delete'], 'alter_tags') }).toThrowError("Invalid Base Permissions")
expect(function () { pdr.canDeny(['create', 'delete'], 'audit') }).toThrowError("Invalid Base Permissions")
})
Mocha(测试框架)是否有可能没有接受我的错误处理?还是我在函数中犯了错误并且没有正确抛出错误?
同样,当我手动控制台记录每个正在测试的案例时,它们都会按预期抛出错误消息“Invalid Base Permissions”。然而,出于某种原因,测试告诉我没有抛出任何东西。
关于可能导致这种情况的任何想法都会有很大帮助,因为我不知道错误的根源是什么。是 Mocha、JS、我的 try/catch 语法还是其他问题。非常感谢任何帮助。
谢谢!
最佳答案
经过广泛挖掘后设法找到答案,以防其他人将来遇到类似问题。正确答案在这里:http://www.itjavascript.com/why-won-39-t-mocha-recognise-my-error-ask-question/
基本上,我在它到达测试之前处理了错误,所以删除 try/catch 语句解决了这个问题。事后看来很愚蠢,但显然你需要对 Mocha 非常明确。希望这对将来的某些人有用!
关于JavaScript 抛出错误 - 没有抛出错误? Mocha 测试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52998026/