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

Sev*_*evy 2 python django graphql graphene-django django-graphql-jwt

我正在尝试根据 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)
Run Code Online (Sandbox Code Playgroud)

ruo*_*ola 6

这就是我在测试中解决它的方法:

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

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
                    }
                }
            }
        '''

        response = self.query(
            graphql,
            op_name='createMember',
            variables={'firstName': 'Foo'},
            headers=headers,
        )
        self.assertResponseNoErrors(response)
Run Code Online (Sandbox Code Playgroud)