javascript - 测试graphql解析器时如何制作虚拟上下文?
问题描述
我想测试一些 graphql 突变。但我不确定在编写测试时要给出什么作为上下文。例如,我想调用 createPost 突变:
it('admin should create a post', async () => {
await createPost(
null,
{
title: 'How to write a blog post',
body: 'lorem ipsum dollar emmet',
published: true,
},
dummyContext
).should.be.fulfilled;
});
这里作为一个 dummyContext 我正在使用这个:
const dummyContext = {
request: { get: () => token },
};
但是,它不起作用。内部createPost
变异logincheker
方法称为:
export async function loginChecker({ request }) {
const Authorization = request.get('Authorization');
if (Authorization) {
const token = Authorization.replace('Bearer ', '');
const userInJwt = jwtValidator(token);
const user = await prisma.user.findOne({ where: { id: userInJwt.id } });
if (!user) {
throw new Error('Not Authorized');
}
return user;
}
}
我在运行测试用例时遇到了这个错误
AssertionError: expected promise to be fulfilled but it was rejected with 'TypeError: Authorization.replace is not a function
解决方案
如果您正在寻找集成测试,则不需要模拟上下文。您可以直接针对我在此处创建的实际数据库运行服务器。在__tests__
文件夹中,我已针对实际服务器运行它,因此您无需模拟 Context 并可以直接针对 DB 调用 API。
推荐阅读
- javascript - 是否使用 php if 语句作为 javascript if 语句非正统的条件?
- excel - 如果列中不存在值,则创建新行
- javascript - 使用条件和循环禁用冲突代码
- javascript - 如何使用ajax从php推送到jquery数组?
- ios - 如何防止 UI 快速冻结?
- java - 错误 java.sql.SQLException: 未找到列 'id'
- azure - 选择列表设置类型在哪里?
- r - 了解为什么在删除某些列时出现计算错误会产生零错误:library(lpSolve)
- go - 如果您需要零值,则惯用的替代零值
- python - 如何向热图单元格添加注释?