首页 > 解决方案 > Django 石墨烯突变在单元测试中返回错误请求

问题描述

我已经定义了以下 graphql 模式来创建一个非活动用户

from .models import User, UserManager

import graphene
from graphene_django import DjangoObjectType


class UserType(DjangoObjectType):
    class Meta:
        model = User


class PreSignupInput(graphene.InputObjectType):
    email = graphene.String(required=True)
    terms_of_use = graphene.Boolean(required=True)


class PreSignup(graphene.Mutation):
    class Arguments:
        pre_signup_data = PreSignupInput(required=False)

    user = graphene.Field(UserType)

    def mutate(self, info, user_data=None):
        user = UserManager().create_inactive_user_with_email(user_data.email, user_data.terms_of_use)

        return PreSignup(user=user)


class Mutation(graphene.ObjectType):
    pre_signup = PreSignup.Field()

User类也在配置中定义为 AUTH_USER_MODEL 并且create_inactive_user_with_email创建一个 User 实例,将其保存到数据库并返回它。

每当我运行以下测试时:

from graphene_django.utils.testing import GraphQLTestCase


class UserSchemaTest(GraphQLTestCase):
    def test_create_inactive_user(self):
        response = self.query(
            '''
            mutation preSignup($input: PreSignupInput!) {
                preSignup(input: $input) {
                    user {
                        id
                        email
                    }
                }
            }
            ''',
            op_name='preSignup',
            input_data={'email': 'test@example.com', 'terms_of_use': True}
        )

        print(response.json())

        self.assertResponseNoErrors(response)

它失败并出现错误请求错误和以下错误消息:

{
    'errors': [
        {'message': 'Unknown argument "input" on field "preSignup" of type "Mutation".',
         'locations': [{'line': 3, 'column': 27}]}]
}

有什么我想念的吗?我使用本教程进行测试。

谢谢!

标签: djangographqlgraphene-django

解决方案


推荐阅读