Тестирование в Graphene

Для современного разработчика автоматизированное тестирование - очень полезный инструмент, облегчающий поиск и устранение багов. Вы можете использовать набор тестов дял решения или избежания целого ряда проблем:

  • Во время написания новго кода вы можете использовать тесты для подтверждения того факта, что Ваш код работает как предполагалось.
  • Во время рефакторинга или модифицирования старого кода вы можете использовать тесты, чтобы убедиться что Ваши изменения не повлияли на поведение приложения самым неожиданным образом.

Тестирвоание GraphQL приложенияэто комплексная задача, потмоу что приложение содержит несколько слоев логики - определение схемы, валидация схемы, разрешения(permissions) и разрешение полей (field resolution).

С тестовым фреймворком Graphene и разлиными утилитами Вы сможете симулировать запросы GraphQ, выполнять мутации, смотреть возвращаемые приложением значения и в целом проверить, что ваш код делает то, что должен.

Инструменты тестирования

Graphene предоставляет небольшой набор инструментов, полезных при написании тестов.

Тестовый клиент

Тестовый клиент это класс Python, который действует как фиктивный клиент GraphQL, позволяя Вам тестировать View и взаимодействовать с приложением Graphene на программном уровне.

Некоторые вещи, которые вы можете делать при помощи тестового клиента:

  • Симулировать запросы (Queries) и мутации (Mutations) и наблюдать ответы сервера.
  • Првоерить, что определенный запрос рендериться с помощью определенного шаблона Django, с контекстом данного шаблона, который в свою очередь содержит определенные значения.

Обзор и быстрый пример

Для использования тестового клиента необходимо инстанцироватьgraphene.test.Client и получить GraphQL ответы сервера:

from graphene.test import Client

def test_hey():
    client = Client(my_schema)
    executed = client.execute('''{ hey }''')
    assert executed == {
        'data': {
            'hey': 'hello!'
        }
    }

Выполнение с параметрами

Также Вы можете добавить дополнительные аргументы в метод выполненияexecute, такие какcontext_value,root_value,variable_values, и так далее.:

from graphene.test import Client

def test_hey():
    client = Client(my_schema)
    executed = client.execute('''{ hey }''', context_value={'user': 'Peter'})
    assert executed == {
        'data': {
            'hey': 'hello Peter!'
        }
    }

Тестирование при помощи Snapshot

По мере того, как наш API развивается, нам необходимо знать, когда наши изменения влекут за собой нарушения в работе нашего GraphQL приложения.

Тем не менее, написание тестов и воспроизведение таких же результатов, которых мы ожидаем от приложения GraphQL, могут быть утомительной и рутинной задачей, иногда проще пропустить этот процесс.

Поэтому рекомендуется использовать SnapshotTest.

SnapshotTest позволяет нам писать все эти тесты быстро, так как при первом запуске теста автоматически создается слепок snapshot для нас.

Простой пример как наши тесты будут выглядеть, если мы воспользумесяpytest:

def test_hey(snapshot):
    client = Client(my_schema)
    # This will create a snapshot dir and a snapshot file
    # the first time the test is executed, with the response
    # of the execution.
    snapshot.assert_match(client.execute('''{ hey }'''))

Если мы используемunittest:

from snapshottest import TestCase

class APITestCase(TestCase):
    def test_api_me(self):
        """Testing the API for /me"""
        client = Client(my_schema)
        self.assertMatchSnapshot(client.execute('''{ hey }'''))

results matching ""

    No results matching ""