【发布时间】:2019-06-22 01:25:04
【问题描述】:
我正在使用graphql-tool 模拟数据进行测试。
我希望模拟当我选择一个用户时,它会打开一个详细页面并显示用户公司信息。
查询
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' 进行查询时,它会返回一个随机用户 id,例如 'u2',这给我在前端显示它带来了一些麻烦。
我以为我可以在下面做这样的事情,但事实证明我错了。 user 在下面的代码中是 undefined。
const mocks = {
User: (user) => ({
id: user.id || casual.random_element(allUserIds),
name: casual.name,
company: casual.company_name
})
};
有没有办法在 graphql-tools 中传递查询参数?谢谢
【问题讨论】:
-
如果您希望在整个测试过程中保持测试数据的持久性,最好使用假/模拟对象的集合或具有一致种子的模拟数据生成器。
-
@ClaireLin 谢谢,我确实试过了。但还没想好我应该在哪里使用
casual.seed(123);。首先,我尝试在导入后立即放在上面,它没有任何效果。然后我尝试放入像const mocks = { User: () => { casual.seed(0); return { id: casual.random_element(allUserIds), ... } } };这样的模拟,它会给我所有用户相同的信息。
标签: javascript graphql graphql-tools