JavaScript Throw Error - Ошибка не выдана?Проблема тестирования мокко - PullRequest
0 голосов
/ 25 октября 2018

Я работаю над проектом 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')

Я получаю правильную строку «Неверные базовые разрешения», напечатанную на консоли, см. 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 (структура теста)не улавливает мою обработку ошибок;или я допустил ошибку в своей функции и не выдает ошибку надлежащим образом?

Опять же, когда я вручную регистрирую консоль в каждом из тестируемых случаев, все они выдают сообщение об ошибке «Недопустимые базовые разрешения», как и ожидалось.,Однако по какой-то причине тесты говорят мне, что ничего не выбрасывается.

Любые идеи относительно того, что может быть причиной этого, будут огромной помощью, так как я не знаю, каков источник ошибки.Это Mocha, JS, мой синтаксис try / catch или какой-то другой вопрос.Любая помощь очень ценится.

Спасибо!

1 Ответ

0 голосов
/ 27 октября 2018

Успешно найдет ответ после обширных раскопок, опубликует, если у кого-нибудь еще возникнут подобные проблемы в будущем.Правильный ответ здесь: http://www.itjavascript.com/why-won-39-t-mocha-recognise-my-error-ask-question/

По сути, я обрабатывал ошибку до того, как она достигла теста, поэтому удаление операторов try / catch решило проблему.Глупо задним числом, но, видимо, вам нужно быть очень откровенным с Мокко.Надеюсь, в будущем это кому-нибудь пригодится!

...