Comments (3)
Currently I have default mocks for unions. To have default mocks for interfaces, all you'd need to do is look through all the types in the schema and find the ones that implement this interface, then do the same as for the unions. Anyone want to try making a PR?
from graphql-tools.
Actually, it's a bit trickier than that, because unions and interfaces need to define the resolveType. Because mocking of objects is deferred to scalars when there is no default type, mocking unions isn't that straight forward. The best I can offer for now is that people define the mock for the union type themselves. Making it work out of the box will take a bit more work.
from graphql-tools.
Unions are now implemented and also work in apolloServer. The last remaining bit is interfaces, which could be done by creating mock data in the same fashion as for unions and defining __resolveType on the Interface. However, to know all implementing types of an interface, we have to first look up all types in the Schema and find the ones that implement the interface.
The code in mocking could go here, right after mocking for Union types: https://github.com/apollostack/graphql-tools/blob/98313587d6f11f924c027d36b71ee91e96a62a1b/src/mock.js#L138
In order to figure out all the types that implement an interface, the following function in GraphQL-JS can be used: https://github.com/graphql/graphql-js/blob/359ec769ebfcb2c1ef15ea74abb412d0c4c9131e/src/type/schema.js#L170
schema.getPossibleTypes(interfaceOrUnionType)
The code in mocks currently uses some one-letter variables (o, a, c, r)
that just get passed around, so it's not obvious what they do. These are actually the arguments to a resolve function, so the r
value can be used to get access to the schema: const schema = r.schema
. Maybe r should be renamed to
info`.
So the following should be enough to get mocks for Interface types:
return { typename: getRandomElement(info.schema.getPossibleTypes(fieldType)) };
Then of course it needs a test, but that test can be just like the one for UnionType. When testing, don't forget to explicitly pass the implementing types of the interface expliticly to the schema, because otherwise the GraphQL schema will not be aware of them.
from graphql-tools.
Related Issues (20)
- Project Roadmap HOT 2
- Drop dependency on fast-url-parser HOT 2
- DEBUG=1 results in console.time() warnings
- @graphql-tools/mock does not work with Vitest HOT 5
- Deterministic (seeded) enum values
- Stitching: object field is null when all selections are delegated
- Http Executor encodes headers into query parameters which can leak Authorization headers
- Ability to get names of all the stitched queries in a middleware
- requireResolversToMatchSchema: 'warn' throws an error
- Support .astro file loading on graphql-tag-pluck HOT 1
- Troubles with connectionParams on subscriptions
- Adding content-type header is not supported when fetching schema
- Query does not provide a operation name as a property in the request body causing some server configurations to reject the request
- @graphql-tools/mock 9.0.1 causes panic: Internal errors HOT 2
- @graphql-tools/merge directive arguments compare should not require identical ordering HOT 1
- load babel options in `graphql-tag-pluck`
- [mock] relayStylePaginationMock sometimes returns an incorrect value for hasNextPage
- Batch execution throws an error when Array.prototype has additional property
- Federation @join__field requires parameter handling improvement
- filterSchema argumentFilter provides incorrect typeName
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphql-tools.