1

我在我的项目中使用 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 测试后得到的错误。

Traceback(最近一次调用最后):文件“C:\Users\Udemezue\Desktop\resume\post\tests.py”,第 25 行,在 test_post_list token = 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 行,在 get raise self.model.DoesNotExist(accounts. models.User.DoesNotExist:用户匹配查询不存在。

这是我得到的错误。

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

回溯(最后一次调用):文件“C:\Users\Udemezue\Desktop\resume\post\tests.py”,第 62 行,在 test_post_list self.assertResponseNoErrors(response) 文件“C:\Users\Udemezue\Desktop\ resume\env\lib\site-packages\graphene_django\utils\testing.py",第 75 行,在 assertResponseNoErrors self.assertEqual(resp.status_code, 200) AssertionError: 400 != 200


在 0.137 秒内运行 1 次测试

FAILED (failures=1) 正在销毁别名“default”的测试数据库...

4

1 回答 1

2

这对我有用。

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)

于 2020-10-18T18:12:30.383 回答