Lin Du
Lin Du

Reputation: 102447

graphql-tools, how can I use mockServer to mock a "Mutation"?

I try to use mockServer of graphql-tools to mock an Mutation.

here is my unit test:

  it('should update user name correctly', () => {
    mockserver
      .query(
        `{
      Mutation {
        updateUserName(id: 1, name: "du") {
          id
          name
        }
      }
    }`
      )
      .then(res => {
        console.log(res);
        expect(1).to.be.equal(1);
      });
  });

But, got an error:

mock server test suites
    ✓ should get users correctly
    ✓ should get user by id correctly
    ✓ should update user name correctly
{ errors:
   [ { GraphQLError: Cannot query field "Mutation" on type "Query".
    at Object.Field (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/validation/rules/FieldsOnCorrectType.js:65:31)
    at Object.enter (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/language/visitor.js:324:29)
    at Object.enter (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/language/visitor.js:366:25)
    at visit (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/language/visitor.js:254:26)
    at visitUsingRules (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/validation/validate.js:74:22)
    at validate (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/validation/validate.js:59:10)
    at graphqlImpl (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/graphql.js:106:50)
    at /Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/graphql.js:66:223
    at new Promise (<anonymous>)
    at Object.graphql (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql/graphql.js:63:10)
    at Object.query (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/graphql-tools/dist/mock.js:19:63)
    at Context.it (/Users/ldu020/workspace/apollo-server-express-starter/src/mockServer/index.spec.js:95:8)
    at callFn (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/mocha/lib/runnable.js:383:21)
    at Test.Runnable.run (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/mocha/lib/runnable.js:375:7)
    at Runner.runTest (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/mocha/lib/runner.js:446:10)
    at /Users/ldu020/workspace/apollo-server-express-starter/node_modules/mocha/lib/runner.js:564:12
    at next (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/mocha/lib/runner.js:360:14)
    at /Users/ldu020/workspace/apollo-server-express-starter/node_modules/mocha/lib/runner.js:370:7
    at next (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/mocha/lib/runner.js:294:14)
    at Immediate.<anonymous> (/Users/ldu020/workspace/apollo-server-express-starter/node_modules/mocha/lib/runner.js:338:5)
    at runCallback (timers.js:763:18)
    at tryOnImmediate (timers.js:734:5)
    at processImmediate (timers.js:716:5)
       message: 'Cannot query field "Mutation" on type "Query".',
       locations: [Array],
       path: undefined } ] }

and, I read graphql-tools interface.d.ts file.

export interface IMockServer {
    query: (query: string, vars?: {
        [key: string]: any;
    }) => Promise<ExecutionResult>;
}

Obviously, there is no mutation function in mockServer.

Does mockServer support Mutation?

https://github.com/apollographql/graphql-tools/issues/279

Upvotes: 3

Views: 2167

Answers (1)

Brendan Bell
Brendan Bell

Reputation: 106

It's the structure of your query. The query should be structured much like you would in GraphiQL such as:
mutation { updateUserName(id: 1, name: "du") { id name } }

Hence, your code should look something like this, with the mutation keyword as the first thing in your query before your opening brace { :

it('should update user name correctly', () => {
  mockserver
  .query(`mutation {
    updateUserName(id: 1, name: "du") {
      id
      name
    }
  }`)
  .then(res => {
    console.log(res);
    expect(1).to.be.equal(1);
  });
});

Upvotes: 3

Related Questions