New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mocking: Interfaces and Unions #34
Comments
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. |
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? |
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
The code in mocks currently uses some one-letter variables So the following should be enough to get mocks for Interface types:
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. |
Interfaces and unions are currently not mocked, I believe. The straightforward solution is to randomly pick an implementing type each time a field returns a Union or Interface, and then mock that type.
The text was updated successfully, but these errors were encountered: