Исключение поднято, но не перехвачено assertRaises - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь проверить, не прошла ли моя аутентификация. Исключение возникает, но не перехватывается assertRaises. Что мне здесь не хватает?

def test_auth(self):
    from graphql_jwt.exceptions import PermissionDenied

    with self.assertRaises(PermissionDenied):
        response = self.client.execute(self.query)

Traceback:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
Traceback (most recent call last):
  File "/home/dan/game/venv/lib/python3.7/site-packages/promise/promise.py", line 487, in _resolve_from_executor
    executor(resolve, reject)
  File "/home/dan/game/venv/lib/python3.7/site-packages/promise/promise.py", line 754, in executor
    return resolve(f(*args, **kwargs))
  File "/home/dan/game/venv/lib/python3.7/site-packages/graphql/execution/middleware.py", line 75, in make_it_promise
    return next(*args, **kwargs)
  File "/home/dan/game/venv/lib/python3.7/site-packages/graphene_django/filter/fields.py", line 106, in connection_resolver
    **args
  File "/home/dan/game/venv/lib/python3.7/site-packages/graphene_django/fields.py", line 156, in connection_resolver
    iterable = resolver(root, info, **args)
  File "/home/dan/game/venv/lib/python3.7/site-packages/graphql_jwt/decorators.py", line 31, in wrapper
    return func(info.context, *args, **kwargs)
  File "/home/dan/game/venv/lib/python3.7/site-packages/graphql_jwt/decorators.py", line 43, in wrapper
    raise exceptions.PermissionDenied()
graphql.error.located_error.GraphQLLocatedError: You do not have permission to perform this action

F.
======================================================================
FAIL: test_auth (api.tests.test_mutations.TestGame)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/dan/game/api/tests/test_mutations.py", line 57, in test_auth
    response = self.client.execute(self.query)
AssertionError: PermissionDenied not raised

Возникает исключение здесь .

1 Ответ

2 голосов
/ 20 июня 2019

Ваш тест не перехватывает исключение PermissionDenied, поскольку что-то в выполняемом вами коде помещает это исключение в экземпляр graphql.error.located_error.GraphQLLocatedError. Поскольку вы проверяете неправильный тип исключения, тест не пройден.

Я не слишком много знаю о библиотеках, которые вы используете, и невидимое изменение типа исключения кажется ужасным заблуждением (оно должно по крайней мере добавить код, который изменяет тип исключения, к трассировке исключения) так что вы можете отладить его). Но вы можете обойти эту проблему, перехватив завернутое исключение и сбросив оригинал:

def test_auth(self):
    from graphql_jwt.exceptions import PermissionDenied
    from graphql.error.located_error import GraphQLLocatedError

    with self.assertRaises(PermissionDenied):
        try:
            response = self.client.execute(self.query)
        except GraphQLLocatedError as e:
            raise e.original_error
...