【发布时间】:2021-01-10 00:18:09
【问题描述】:
我有一个简单的模型,
class Person(models.Model):
first_name = models.CharField(max_length=20)
我已经设置了 GraphQL 来查询数据,
import graphene
import graphene_django
from .models import Person
class PersonType(graphene_django.DjangoObjectType):
class Meta:
model = Person
fields = '__all__'
class PersonQuery(graphene.ObjectType):
persons = graphene.List(PersonType)
def resolve_persons(*args, **kwargs):
return Person.objects.all()
到目前为止一切顺利。后来我决定编写单元测试来查询persons 数据
from django.test import TestCase
from .models import Person
from .schema import schema
class TestGraphQLQuery(TestCase):
@classmethod
def setUpTestData(cls):
cls.person = Person.objects.create(first_name="Jack")
def test_person_query(self):
query = """
query{
persons {
id
firstName
}
}
"""
result = schema.execute(query).data
expected = {'persons': [{'id': f'{self.person.pk}', 'firstName': self.person.first_name}]}
self.assertEqual(result, expected)
这也很有效。
后来,我的模型更新了一个额外的字段,age,
class Person(models.Model):
first_name = models.CharField(max_length=20)
age = models.IntegerField(default=0)
更改后,我运行了单元测试。正如所料,它通过了。
问题
如何创建测试用例,以便在添加或删除任何字段时测试会失败?
我正在寻找的这个测试用例的优点
- 每当有新字段添加到模型中时,我们都会收到通知
- 只要字段被删除或重命名,我们都会收到通知
- 生成动态 graphql 查询也将有助于验证从架构返回的数据。
【问题讨论】:
标签: python django graphql python-unittest graphene-django