3

我尝试使用mockServerofgraphql-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

4

1 回答 1

3

这是您的查询的结构。查询的结构应该与您在 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);
  });
});
于 2018-05-14T13:41:12.683 回答