如何在 graphql-tool 中传递查询参数?
How to pass query arguments in graphql-tool?
我正在使用 graphql-tool 模拟数据进行测试。
我希望模拟当我 select 一个用户时,它会打开一个详细信息页面并显示用户公司信息。
查询
const query = `
query User($id: ID!) {
user(id: $id) {
id
company
}
}
`;
模拟服务器
import { addMockFunctionsToSchema } from 'graphql-tools';
import casual from 'casual';
const allUserIds = ['u1', 'u2', 'u3'];
const mocks = {
User: () => ({
id: casual.random_element(allUserIds),
name: casual.name,
company: casual.company_name
})
};
addMockFunctionsToSchema({ schema, mocks });
但是,现在,当我使用参数 id 'u1'
查询时,它会 return 一个随机用户 id,例如 'u2'
,这让我很难显示它在前端。
我以为我可以做下面这样的事情,但事实证明我错了。 user
在下面的代码中是 undefined
。
const mocks = {
User: (user) => ({
id: user.id || casual.random_element(allUserIds),
name: casual.name,
company: casual.company_name
})
};
有没有办法在 graphql-tools 中传递查询参数?谢谢
这取决于您希望测试数据的一致性。如果您只关心 id
与您的查询参数保持一致,那么您可以执行以下操作:
const mocks = {
Query: () => ({
user: (root, user) => ({
id: user.id || casual.random_element(allUserIds),
name: casual.name,
company: casual.company_name
})
})
};
As mentioned here 在文档中,模拟函数就像 GraphQL 解析器。因此,函数的参数遵循每个字段可用的相同顺序 root, arguments, context
。
请在此处查看 code sandbox 的现场演示。
这保证无论何时您查询 ID 为 u1
的用户,您总是会收到一个带有 id = "u1"
的用户数据对象,其中包含随机生成的公司和名称字段。但是,如果您希望整个用户对象在整个测试过程中保持不变,则需要在模拟函数之外创建模拟用户数据,并相应地查询和过滤数据。
我正在使用 graphql-tool 模拟数据进行测试。
我希望模拟当我 select 一个用户时,它会打开一个详细信息页面并显示用户公司信息。
查询
const query = `
query User($id: ID!) {
user(id: $id) {
id
company
}
}
`;
模拟服务器
import { addMockFunctionsToSchema } from 'graphql-tools';
import casual from 'casual';
const allUserIds = ['u1', 'u2', 'u3'];
const mocks = {
User: () => ({
id: casual.random_element(allUserIds),
name: casual.name,
company: casual.company_name
})
};
addMockFunctionsToSchema({ schema, mocks });
但是,现在,当我使用参数 id 'u1'
查询时,它会 return 一个随机用户 id,例如 'u2'
,这让我很难显示它在前端。
我以为我可以做下面这样的事情,但事实证明我错了。 user
在下面的代码中是 undefined
。
const mocks = {
User: (user) => ({
id: user.id || casual.random_element(allUserIds),
name: casual.name,
company: casual.company_name
})
};
有没有办法在 graphql-tools 中传递查询参数?谢谢
这取决于您希望测试数据的一致性。如果您只关心 id
与您的查询参数保持一致,那么您可以执行以下操作:
const mocks = {
Query: () => ({
user: (root, user) => ({
id: user.id || casual.random_element(allUserIds),
name: casual.name,
company: casual.company_name
})
})
};
As mentioned here 在文档中,模拟函数就像 GraphQL 解析器。因此,函数的参数遵循每个字段可用的相同顺序 root, arguments, context
。
请在此处查看 code sandbox 的现场演示。
这保证无论何时您查询 ID 为 u1
的用户,您总是会收到一个带有 id = "u1"
的用户数据对象,其中包含随机生成的公司和名称字段。但是,如果您希望整个用户对象在整个测试过程中保持不变,则需要在模拟函数之外创建模拟用户数据,并相应地查询和过滤数据。