我正在使用 executeOperation 在 Apollo GraphQL 服务器上执行集成测试,如 Apollo 文档中所述。我是使用片段的新手,但如果我理解正确,我可以在 .gql 文件中定义片段,以便在客户端(例如 iOS 客户端和 React 客户端)之间共享它们。我想将片段的使用扩展到我的测试中,这样当我编写查询传递给executeOperation 时,我可以使用我已经在 .gql 文件中定义的片段。有没有人找到办法做到这一点?
附注我知道根本原因是片段不是服务器定义的架构的一部分,但我只是在寻找解决此问题的方法,以便避免代码重复。
.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();
})