Графен запрос зависает на неопределенное время при тестировании с pytest - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь протестировать свой бэкэнд, написанный на Django 2.2.2 и Python 3. Я создал несколько запросов graphql, которые определенно работают при тестировании с веб-интерфейсом graphql.Однако при тестировании с помощью pytest и клиента тестирования графена эти запросы всегда будут зависать бесконечно.Я собрал воспроизводимый пример, который фактически основан на примере кода из документации graphene-django .

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

Этот пример ведет себя втак же (глохнет навсегда, ошибок нет).Я использую последние графен-джанго (2.3.2) и pytest (4.6.3).Я должен также упомянуть, что я запускаю это внутри контейнера Docker.Есть идеи, почему это происходит?Это ошибка в библиотеке графена-джанго?

1 Ответ

0 голосов
/ 03 июля 2019

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

В документации говорится, что тесты не пройдут, если доступ к БД не будет предоставлен, поэтому я не ожидаю, что они остановятся навсегда.

...