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

How to authenticate with django-grahql-jwt in a graphene-django GraphQLTestCase?

我正在尝试根据 graphene django 文档测试我的突变。该突变适用于 @login_required 装饰器,但存在一个问题,因为任何登录测试方法都不起作用。我尝试使用 self.client.loginself.client.force_login。我什至做了一个 tokenAuth 突变,并在那里硬编码了一些凭证,但它也不起作用;用户仍然是匿名用户。

def test_create_member_mutation(self):
    response = self.query(
        '''
        mutation createMember($firstName: String) {
            createMember(firstName: $firstName) {
                member {
                    id
                }
            }
        }
        ''',
        op_name='createMember',
        variables={'firstName': 'Foo'}
    )

    self.assertResponseNoErrors(response)

我在测试中是这样解决的:

您可以在 self.query()headers 关键字参数中传递为测试用户创建的令牌:

from django.contrib.auth import get_user_model
from graphene_django.utils import GraphQLTestCase
from graphql_jwt.shortcuts import get_token


class ExampleTests(GraphQLTestCase):

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

        graphql = '''
            mutation createMember($firstName: String) {
                createMember(firstName: $firstName) {
                    member {
                        id
                    }
                }
            }
        '''

        respsone = self.query(
            graphql,
            op_name='createMember',
            variables={'firstName': 'Foo'},
            headers=headers,
        )
        self.assertResponseNoErrors(response)