【发布时间】:2019-04-17 17:11:41
【问题描述】:
我试图只模拟下面Contact 类型的一小部分。我的解析器从 REST 端点为 Contact 中的所有字段返回数据,test 除外。出于演示目的,我希望能够保留所有其他字段的服务器数据,但只模拟 test 字段。
我定义了以下 GraphQL 架构:
const typeDefs = `
type Contact {
id: String,
first_name: String
last_name: String
middle_name: String
date_of_birth: String
test: String
}
type Query {
contacts: [Contact!]!
Contact(id: String!): Contact!
}
`;
我定义了以下模拟:
const mocks = {
Contact: () => ({
test: () => "This data is mocked!"
})
};
并定义了以下解析器:
const resolvers = {
Query: {
contacts: async (parent, args, { dataSources }) =>
dataSources.MYAPI.getAllContacts(),
Contact: async (parent, { id }, { dataSources }) =>
dataSources.MYAPI.getContact(id)
}
};
然后我初始化服务器:
const server = new ApolloServer({
typeDefs,
resolvers,
mocks,
dataSources: () => {
return {
MYAPI: new MYAPI()
};
},
mockEntireSchema: false
});
以上行不通。我添加了mockEntireSchema:true 配置,它阻止了我的服务器响应被覆盖,但是test 属性仍然返回Hello World 的默认字符串模拟,而不是我尝试的This data is mocked! 模拟。
我知道模拟设置正确,因为我可以删除 mockEntireSchema 配置并且我的模拟数据正确显示。
这甚至可能吗?或者mockEntireSchema 和模拟的行为通常不支持这一点?
【问题讨论】:
-
同样的问题:在
apollo-servergithub.com/apollographql/apollo-server/issues/2421上打开了一个问题
标签: graphql apollo apollo-server