如何使用GraphQLTestCase在graphene-django中使用django-grahql-jwt进行身份验证?

时间:2020-10-06 22:33:09

标签: django django-graphql-jwt

我在项目中使用Django和Graphene。我用GraphQLTestCase编写了测试。当我尝试使用JWT对用户进行身份验证时,通常会收到错误消息。

这是我的代码:

from django.test import TestCase

import json

from graphene_django.utils.testing import GraphQLTestCase

from resume.graph.schema import schema

from .models import Post

from django.contrib.auth import get_user_model

from graphql_jwt.shortcuts import get_token

User = get_user_model()


class PostTestCase(GraphQLTestCase):

    GRAPHQL_SCHEMA = schema

    def test_post_list(self):
        token   = get_token(User.objects.get(pk=1))
        headers = {"HTTP_AUTHORIZATION": f"JWT {token}"}

        response = self.query(
            '''
            query {
                post{
                    user
                    text
                }
            }

            ''',
        op_name = 'post',
        headers=headers,
            )
        content = json.loads(response.content)
        self.assertResponseNoErrors(response)

这是运行python manage.py测试后得到的错误。

回溯(最近通话最近): 在test_post_list中的第25行,文件“ C:\ Users \ Udemezue \ Desktop \ resume \ post \ tests.py” 令牌= get_token(User.objects.get(pk = 9)) 文件“ C:\ Users \ Udemezue \ Desktop \ resume \ env \ lib \ site-packages \ django \ db \ models \ manager.py”,第82行,在manager_method中 返回getattr(self.get_queryset(),name)(* args,** kwargs) 在获取文件“ C:\ Users \ Udemezue \ Desktop \ resume \ env \ lib \ site-packages \ django \ db \ models \ query.py”中,行415 提高self.model.DoesNotExist( account.models.User.DoesNotExist:用户匹配查询不存在。

这是我得到的错误。

============================================= ======================= 失败:test_post_list(post.tests.PostTestCase)

回溯(最近通话最近): 在test_post_list中的第62行,文件“ C:\ Users \ Udemezue \ Desktop \ resume \ post \ tests.py” self.assertResponseNoErrors(响应) 在assertResponseNoErrors中的文件“ C:\ Users \ Udemezue \ Desktop \ resume \ env \ lib \ site-packages \ graphene_django \ utils \ testing.py”,行75 self.assertEqual(resp.status_code,200) AssertionError:400!= 200


在0.137秒内进行了1次测试

失败(失败= 1) 销毁测试数据库的别名“默认” ...

1 个答案:

答案 0 :(得分:1)

这对我有用。

from django.contrib.auth import get_user_model
from graphql_jwt.shortcuts import get_token
User = get_user_model()
import json


class PostTestCase(GraphQLTestCase):

    def test_post_list(self):
        user = get_user_model().objects.create(username='myuser')
        token   = get_token(user)
        headers = {"HTTP_AUTHORIZATION": f"JWT {token}"}

        response = self.query(
            '''
            query GetUser($username: String!) {
              user(username: $username) {
                id
              }
            }

            ''',
        headers=headers,
            )
        content = json.loads(response.content)
        self.assertResponseNoErrors(response)

相关问题