首页 > 解决方案 > 如何对使用 apollo-resolvers 创建的 Graphql Resolver 函数进行单元测试

问题描述

我使用' apollo-resolvers ' npm 模块创建了解析器s(userresolver.js) ,如下所示。

import { createResolver } from 'apollo-resolvers';
import {  isInstance } from 'apollo-errors';

const baseResolver = createResolver(
  null,
  (root, args, context, error) => isInstance(error) ? error : new UnknownError()
);



const users = baseResolver.createResolver(
  (parent, args, { models, me } ) => {
         return Object.values(models.users);
  }
);

export default {
  Query: {
    users
  }
}

;

当我在启动服务器后测试查询时,这些也可以正常工作。

我现在想对解析器功能进行单元测试。

我不知道该怎么做。有人可以帮助我如何对解析器功能进行单元测试。我正在使用mocha 和 cha i 来测试我的项目。

标签: mocha.jsgraphqlchaiapollo-server

解决方案


您可以尝试easygraphql-tester,它有一种方法可以帮助您测试解析器。

是它的文档。

例子:

解析器

"use strict";

const license = (__, args, ctx) => {
  const { key } = args;

  return {
    id: "1234",
    body: "This is a test license",
    description: `This is a description with key ${key}`
  };
};

module.exports = {
  Query: {
    license
  }
};

测试

"use strict";

const fs = require("fs");
const path = require("path");
const { expect } = require("chai");
const EasyGraphQLTester = require("easygraphql-tester");

const resolvers = require("../resolvers");
const schemaCode = fs.readFileSync(
  path.join(__dirname, "..", "schema.gql"),
  "utf8"
);

describe("Test resolvers", () => {
  let tester;
  beforeAll(() => {
    tester = new EasyGraphQLTester(schemaCode, resolvers);
  });

  it("should return expected values", async () => {
    const query = `
      query GET_LICENSE($key: String!) {
        license(key: $key) {
          id
          body
          description
        }
      }
    `;

    const args = {
      key: "1234"
    };

    const result = await tester.graphql(query, {}, {}, args);
    expect(result.data.license.id).to.be.eq("1234");
    expect(result.data.license.body).to.be.eq("This is a test license");
    expect(result.data.license.description).to.be.eq(
      `This is a description with key ${args.key}`
    );
  });
});

推荐阅读