我想根据我们的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);
});
这给了我错误:Query root type must be provided
如何针对给定的json模式验证graphql标签?
答案 0 :(得分:1)
您不需要编写单元测试就可以根据给定的json模式检查graphql标签。
在开发过程中,您可以使用WebStorm IDE plugin或类似工具或Visual Studio Code plugin。它看起来像这样:
在构建CI / CD之前,您可以使用GraphQL eslint plugin作为检查代码样式的一部分。
答案 1 :(得分:1)
apollo schema:download
命令在服务器上运行an introspection query,并为您提供该查询的JSON结果。您不能使用此JSON并将其直接传递给GraphQLSchema
构造函数- in the docs显示了初始化该类的正确方法。但是,您可以使用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)