graphql-tools,如何使用 mockServer 模拟 "Mutation"?

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

我尝试使用 graphql-toolsmockServer 来模拟 Mutation

这是我的单元测试:

  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);
      });
  });

但是,出现错误:

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 } ] }

并且,我阅读了 graphql-tools interface.d.ts 文件。

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

很明显,mockServer中没有mutation函数。

mockServer是否支持Mutation

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

这是您查询的结构。查询的结构应该很像您在 GraphiQL 中的结构,例如:
mutation { updateUserName(id: 1, name: "du") { id name } }

因此,您的代码应该看起来像这样,mutation 关键字作为您查询中左大括号之前的第一件事 { :

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);
  });
});