首页 > 解决方案 > 测试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

标签: javascriptgraphqlprismaprisma-graphqlnexus-prisma

解决方案


如果您正在寻找集成测试,则不需要模拟上下文。您可以直接针对我在此处创建的实际数据库运行服务器。在__tests__文件夹中,我已针对实际服务器运行它,因此您无需模拟 Context 并可以直接针对 DB 调用 API。


推荐阅读