Node.js 用Jest测试GraphQL解析器
我希望使用Jest为GraphQL解析器编写测试,但我真的不知道从哪里开始。解析程序是简单的CRUD函数,用于在NodeJ上使用mongoose写入MongoDB数据库 类型: 质疑 解析程序(只读) 如何在不与数据库交互的情况下进行测试?遵循以下步骤Node.js 用Jest测试GraphQL解析器,node.js,mongodb,mongoose,graphql,jestjs,Node.js,Mongodb,Mongoose,Graphql,Jestjs,我希望使用Jest为GraphQL解析器编写测试,但我真的不知道从哪里开始。解析程序是简单的CRUD函数,用于在NodeJ上使用mongoose写入MongoDB数据库 类型: 质疑 解析程序(只读) 如何在不与数据库交互的情况下进行测试?遵循以下步骤 使用环境变量根据模式(生产、测试、开发)更改数据库 导入模式 编写测试并像这样使用graphql const query=`mutation name($id:String!) //dummy example query {
- 使用环境变量根据模式(生产、测试、开发)更改数据库
- 导入模式
- 编写测试并像这样使用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}`)); }
所以不需要直接导入解析器,graphQl将使用它,确保按照模式连接到数据库。尤其是MongoDB,有太多的资源。据我所知,这将创建一个模拟服务器,在那里我可以测试mongodb命令,但不能测试graphQL解析器。如果我将解析器文件导入测试,它将连接到“真实”数据库。似乎我需要截取该连接并替换为模拟数据库
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);
});
}),
},
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}`));
}