JavaScript 抛出错误 - 没有抛出错误?摩卡测试问题

JavaScript Throw Error - No error thrown? Mocha testing issue

我正在做一个 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. What is even more strange is that when I run the tests, I can see this same error message being logged directly above the "failed test" message, which seems contradictory, see 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 语法还是其他问题。非常感谢任何帮助。

谢谢!

在广泛挖掘后设法找到答案,post 以防其他人将来遇到类似问题。正确答案在这里:http://www.itjavascript.com/why-won-39-t-mocha-recognise-my-error-ask-question/

基本上,我是在错误到达测试之前处理它,所以删除 try/catch 语句解决了问题。事后看来很愚蠢,但显然你需要对摩卡非常明确。希望这对将来的人有用!