I'm trying to mock only a small portion of the Contact
type below. My resolvers return data from a REST endpoint for all fields in Contact
except for test
. For demo purposes, I want to be able to retain the server data for all other fields, but only mock the test
field.
I have the following GraphQL schema defined:
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!
}
`;
I have the following mocks defined:
const mocks = {
Contact: () => ({
test: () => "This data is mocked!"
})
};
And the following resolvers defined:
const resolvers = {
Query: {
contacts: async (parent, args, { dataSources }) =>
dataSources.MYAPI.getAllContacts(),
Contact: async (parent, { id }, { dataSources }) =>
dataSources.MYAPI.getContact(id)
}
};
Then I initialize the server with:
const server = new ApolloServer({
typeDefs,
resolvers,
mocks,
dataSources: () => {
return {
MYAPI: new MYAPI()
};
},
mockEntireSchema: false
});
The above does not work. I added the mockEntireSchema:true
configuration which prevented my server response from being overridden, but the test
attribute still returns the default String mock of Hello World
instead of my attempted mock of This data is mocked!
.
I know the mock is set up correctly because I can remove the mockEntireSchema
config and my mock data appears correctly.
Is this even possible or does the behavior of mockEntireSchema
and mocks in general not support this?