如何使用Fragment进行Apollo服务器的集成测试?

问题描述 投票:0回答:1

我正在使用 executeOperation 在 Apollo GraphQL 服务器上执行集成测试,如 Apollo 文档中所述。我是使用片段的新手,但如果我理解正确,我可以在 .gql 文件中定义片段,以便在客户端(例如 iOS 客户端和 React 客户端)之间共享它们。我想将片段的使用扩展到我的测试中,这样当我编写查询传递给executeOperation 时,我可以使用我已经在 .gql 文件中定义的片段。有没有人找到办法做到这一点?

附注我知道根本原因是片段不是服务器定义的架构的一部分,但我只是在寻找解决此问题的方法,以便避免代码重复。

graphql integration-testing apollo-server
1个回答
0
投票
正如您所描述的,

.gql
文件只是一个文本文件。您只需读取该文件并使用其内容即可:

这是一个假设的

testQueries.ts
文件,其中所有查询都在一个文档中。

import fs from 'node:fs';

// load the fragments
const fragments = fs.readFileSync('fragments.gql', 'utf8');


export const testQueries = `gql
  #########################
  # Fragments
  #########################
  ${fragments}
  
  #########################
  # Queries
  #########################

  # User by ID
  query UserById($userId: ID!) {
    userById(id: $userId) {
      ... on User {
        ...UserFields
      }
    }
  }

  # Account by ID
  query AccountById($accountId: ID!) {
    accountById(id: $accountId) {
      ... on Account {
        ...AccountFields
      }
    }
  }
`;

现在,从您的测试文件之一,您可以运行这些特定操作之一:

import { testQueries } from './testQueries';

it('should load a user by id', async () => {
  const response = await testServer.executeOperation({
    query: testQueries,
    variables: {
      userId: '123'
    },
    operationName: 'UserById'
  });
  expect(response.errors).toBeUndefined();
  expect(response).toMatchSnapshot();
})
© www.soinside.com 2019 - 2024. All rights reserved.