Проверка соответствия тегов GraphQL по схеме сервера - PullRequest
0 голосов
/ 05 марта 2019

Я хочу проверить теги graphql на нашем клиенте реакции по схеме, созданной на нашем сервере graphql. Эта проверка будет выполняться как часть нашей тестовой установки и предупредит нас, если в определении схемы graphql будут критические изменения.

Пока я выкачал schema.json с сервера, используя apollo schema:download --endpoint=http...

Теперь я хотел бы проверить следующую мутацию:

import gql from 'graphql-tag';

const LOGIN_MUTATION = gql`
    mutation LoginMutation($email: String!, $password: String!) {
        login(email: $email, password: $password) {
            id
            accessToken
            refreshToken
            expires
        }
    }
`;

с таким тестом:

import { GraphQLSchema } from 'graphql';
import { validate } from 'graphql/validation';
import * as schemaJson from '../../../../../backend/schema.json';
const schema = new GraphQLSchema(schemaJson as any);
import { LOGIN_MUTATION } from './Auth';

test("validate login mutation", assert => {
    const errors = validate(schema, LOGIN_MUTATION);
    const isValid = !errors.length;
    expect(isValid).toBe(true);
});

Это дает мне ошибку: Query root type must be provided

Как я могу сравнить тег graphql с данной схемой json?

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Команда apollo schema:download запускает запрос самоанализа к серверу и выдает результат JSON этого запроса.Вы не можете взять этот JSON и передать его непосредственно конструктору GraphQLSchema - правильный способ инициализации этого класса показан в документации .Тем не менее, вы можете использовать функцию buildClientSchema, которая:

Учитывая результат выполнения клиентом запроса самоанализа, создает и возвращает экземпляр GraphQLSchema, который затем можно использовать со всеми инструментами GraphQL.js., но не может использоваться для выполнения запроса, поскольку самоанализ не представляет функции «resolver», «parse» или «serialize» или любые другие внутренние механизмы сервера.

Собираем все это вместе:

const gql = require('graphql-tag)
const { validate, buildClientSchema } = require('graphql')
const schema = buildClientSchema(introspectionResult)
const document = gql`{
  someQuery
}`
const errorArray = validate(schema, document)
1 голос
/ 05 марта 2019

Вам не нужно писать модульный тест для проверки тега graphql по заданной схеме json.

Во время разработки вы можете использовать плагин WebStorm IDE или аналогичный инструмент или плагин Visual Studio Code . Это будет выглядеть так: enter image description here

Во время CI / CD перед сборкой вы можете использовать Плагин GraphQL eslint для проверки вашего стиля кода.

...