Reactjs 根据服务器架构验证React GraphQL标记

Reactjs 根据服务器架构验证React GraphQL标记,reactjs,graphql,apollo,Reactjs,Graphql,Apollo,我希望根据graphql服务器上生成的模式验证react客户端上的graphql标记。此验证将作为测试设置的一部分运行,并在graphql模式定义中出现中断性更改时向我们发出警告 到目前为止,我已经使用apollo schema:download--endpoint=http… 现在我想测试以下突变: import gql from 'graphql-tag'; const LOGIN_MUTATION = gql` mutation LoginMutation($email: Str

我希望根据graphql服务器上生成的模式验证react客户端上的graphql标记。此验证将作为测试设置的一部分运行,并在graphql模式定义中出现中断性更改时向我们发出警告

到目前为止,我已经使用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);
});
这给了我一个错误:
必须提供查询根类型


如何根据给定的json模式验证graphql标记?

不需要编写单元测试来根据给定的json模式检查graphql标记

在开发过程中,您可以使用或类似的工具或工具。看起来是这样的:


在构建之前的CI/CD期间,您可以使用它作为检查代码样式的一部分。

阿波罗模式:下载
命令在服务器上运行,并提供该查询的JSON结果。您不能接受这个JSON并将其直接传递给
GraphQLSchema
构造函数——下面显示了初始化该类的正确方法。但是,您可以使用
buildClientSchema
函数,该函数:

给定运行内省查询的客户端的结果,创建并返回一个GraphQLSchema实例,该实例可与所有GraphQL.js工具一起使用,但不能用于执行查询,因为内省不表示“解析器”、“解析”或“序列化”函数或任何其他服务器内部机制

总而言之:

const gql = require('graphql-tag')
const { validate, buildClientSchema } = require('graphql')
const schema = buildClientSchema(introspectionResult)
const document = gql`{
  someQuery
}`
const errorArray = validate(schema, document)