我尝试使用 mockServergraphql-tools 来模拟 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>;
}

显然, mutation 中没有 mockServer 函数。
mockServer 是否支持 Mutation

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

最佳答案

这是您查询的结构。查询的结构应该与您在 GraphiQL 中的结构非常相似,例如:mutation { updateUserName(id: 1, name: "du") { id name }}
因此,您的代码应该看起来像这样,在开始大括号 { 之前,将 突变 关键字作为查询中的第一件事:

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

关于graphql-tools,我如何使用 mockServer 来模拟 "Mutation"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49939464/

10-13 02:18