GithubHelp home page GithubHelp logo

Comments (3)

helfer avatar helfer commented on April 30, 2024 1

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.

helfer avatar helfer commented on April 30, 2024

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.

helfer avatar helfer commented on April 30, 2024

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 toinfo`.

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.