Я пытаюсь протестировать свой бэкэнд, написанный на Django 2.2.2 и Python 3. Я создал несколько запросов graphql, которые определенно работают при тестировании с веб-интерфейсом graphql. Однако при тестировании с помощью pytest и графенового тестового клиента эти запросы всегда зависали на неопределенный срок. Я собрал воспроизводимый пример, который на самом деле основан на примере кода из документация по графен-джанго.
test_example.py:
import pytest
import graphene
from graphene_django import DjangoObjectType
from graphene.test import Client
from django.db import models
class UserModel(models.Model):
name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
class User(DjangoObjectType):
class Meta:
model = UserModel
class Query(graphene.ObjectType):
users = graphene.List(User)
def resolve_users(self, info):
return UserModel.objects.all()
schema = graphene.Schema(query=Query)
client = Client(schema)
def test_user():
query = '''
query {
users {
name,
lastName
}
}
'''
result = client.execute(query)
assert 0 # dummy assert
Этот пример ведет себя так же (вечно глохнет, ошибок нет). Я использую последние версии graphene-django (2.3.2) и pytest (4.6.3). Я, вероятно, должен также упомянуть, что я запускаю это внутри контейнера Docker. Любые идеи, почему это происходит? Это ошибка в библиотеке graphene-django?





Я сам нашел ответ через некоторое время, копаясь в документации. Pytest требуется разрешение на использование базы данных. Таким образом, проблема решается простым добавлением отметки pytest @pytest.mark.django_db перед тестом. В качестве альтернативы весь модуль можно пометить для разрешения доступа к базе данных с помощью pytestmark = pytest.mark.django_db. См. документы pytest-django.
В документации говорится, что тесты не пройдут, если доступ к базе данных не будет предоставлен, поэтому я не ожидаю, что они будут останавливаться навсегда.