prisma-binding icon indicating copy to clipboard operation
prisma-binding copied to clipboard

Connect Prisma Bindings to mock server

Open RoryKelly opened this issue 5 years ago • 0 comments

I can mock a generic graphQL service with graphql-tools

I cannot use these tools with prisma binding as I cannot pass prisma-bindings an executable schema.

Current work around

create file schema.ts

const schemaPath = path.format({dir: __dirname, base: '../generated/prisma.graphql'}).toString();
export const typeDefs = gql(importSchema(schemaPath));

add below to package.json

 "generate": "graphql-binding --language typescript --input src/mocks/Schema.ts --outputBinding 
src/mocks/generated/MockPrismaBinding.ts"

Then create a file MockPrisma.ts

export const MockPrisma = ( mockList: IMocks, typeResolvers = undefined) => {
    // Add mocks, modifies schema in place
    const schema = makeExecutableSchema({ typeDefs, resolvers: typeResolvers});
    addMockFunctionsToSchema({ schema , mocks: mockList});
    const link = new SchemaLink({schema});
   // custom binding generate with graphql-binding --language typescript
    return new MockPrismaBindings.Binding(link);
};

Can now mock in tests like this

  const prisma = MockPrisma({
            CurationTag: (source, args) =>
                ({
                    curations: [],
                    user: null,
                    id: args.where.id,
                    name: 'comedy',
                } as CurationTag)
        });

const result = await Resolver.type(null, {ids:[]}, {db: prisma} as Context, null);

RoryKelly avatar Mar 19 '19 14:03 RoryKelly