reactjs - 根据服务器模式验证 React GraphQL 标签
问题描述
我想根据我们的 graphql 服务器上生成的模式来验证我们的 react 客户端上的 graphql 标签。此验证将作为我们测试设置的一部分运行,并在 graphql 模式定义中出现重大更改时向我们发出警告。
到目前为止,我已经使用从服务器中提取了 schema.jsonapollo 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 标记?
解决方案
该apollo schema:download
命令对服务器运行自省查询,并为您提供该查询的 JSON 结果。您不能获取此 JSON 并将其直接传递给GraphQLSchema
构造函数 - 初始化该类的正确方法显示在 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)
推荐阅读
- selenium - 使用量角器如何检查 UI 中是否删除了选项(例如“Ping 测试”)
- c# - 从非 aruba 托管服务器发送来自 Aruba(意大利托管服务)的电子邮件
- excel - excel,计算列组的行组计数数据的方差
- django - django html 查询设置为一个字符串
- android - 为什么用MediaStore访问图片失败,用系统图库选择成功?
- javascript - 将 .js 文件链接到 .html 文件时,JavaScript 不起作用
- java - 可以使用原型模式复制对象的线程吗?
- python - 如何解决“[Winerror]:10054 现有连接被远程主机强行关闭”?
- python - 安装 AutoPy 时的错误和问题
- sql-server - SSIS:将数据从源导入到 SSIS 包中的多个目标表时出现冲突错误