用 Jest 测试 GraphQL 解析器
Posted
技术标签:
【中文标题】用 Jest 测试 GraphQL 解析器【英文标题】:Testing GraphQL resolvers with Jest 【发布时间】:2018-11-03 04:59:20 【问题描述】:我正在寻找使用 Jest 为 GraphQL 解析器编写测试,但我真的不知道从哪里开始。解析器是简单的 CRUD 函数,用于在 NodeJS 上使用 mongoose 写入 MongoDB 数据库。
类型:
type Article
_id: ID!
title: String
authors: [User]
查询
extend type Query
articles: [Article]
article(_id: ID!): Article
解析器(只读)
Query:
articles: () => new Promise((resolve, reject) =>
Article.find(, (err, articles) =>
if (err) reject(err);
else resolve(articles);
);
),
article: (root,
_id,
) => new Promise((resolve, reject) =>
Article.findById(_id, (err, article) =>
if (err) reject(err);
else resolve(article);
);
),
,
如何在不与数据库交互的情况下进行测试?
【问题讨论】:
尤其是 MongoDB,那里有很多资源。 medium.com/entria/…npmjs.com/package/mongo-mockfacebook.github.io/jest/docs/en/mongodb.html 据我所知,这将创建一个模拟服务器,我可以在其中测试 mongodb 命令,但不能测试 graphQL 解析器。如果我将解析器文件导入到测试中,它将连接到“真实”数据库。看来我需要拦截该连接并用模拟数据库替换 【参考方案1】:按照这些步骤进行
使用环境变量根据模式(生产、测试、开发)更改数据库 导入架构像这样编写测试并使用 graphql
const query=`mutation name($id:String!) //dummy example query
user(id:$id)
//fields goes here
`
const result = await graphql(schema, query, , , data);
if (result.data)
return result.data.addEventTag
else
throw new Error(...result.errors.map(err => ` \n$err.message`));
所以不需要直接导入resolver,graphQl会用到,一定要按照模式连接数据库。
【讨论】:
以上是关于用 Jest 测试 GraphQL 解析器的主要内容,如果未能解决你的问题,请参考以下文章