Как модульно протестировать функции преобразователя Graphql, созданные с использованием apollo-resolvers

#mocha.js #graphql #chai #apollo-server

#mocha.js #graphql #чай #apollo-сервер

Вопрос:

Я создал распознавательс (userresolver.js ) используя модуль npm ‘apollo-resolvers‘, как показано ниже.

 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 с chai для тестирования своего проекта.

Ответ №1:

Вы можете попробовать 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}`
    );
  });
});
  

Комментарии:

1. Не уверен, соответствует ли это требованию. для модульного тестирования кода распознавателей. Похоже, что это для тестирования интеграции / E2E.

2. Возможно, этот пример может быть полезен!