【发布时间】:2018-10-28 03:34:56
【问题描述】:
我正在开发一个 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 语法还是其他问题。非常感谢任何帮助。
谢谢!
【问题讨论】:
标签: javascript testing error-handling mocha.js javascript-objects