#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. Возможно, этот пример может быть полезен!