mocha.js - 如何对使用 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 来测试我的项目。
解决方案
您可以尝试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}`
);
});
});
推荐阅读
- javascript - 如何从 html 页面启动 js 文件?
- android-studio - 如何从android studio选项卡中删除彩色框(框架)
- hyperledger-fabric - 在超级账本结构中添加新组织的订购者
- arrays - Flask 是否将 JSON 数组对象映射到 Python 字符串?
- react-native - 如何自定义对 React-Native 的博览会权限“警报”需求?
- java - 在类的@InjectMocks 期间出错
- odata - oData NOT In 与子查询等效
- dialogflow-es - 调用另一个意图的轮播项目(不是后续 actions_intent_option)
- javascript - 打字稿看不到声明文件
- angular - Highcharts - 每个切片的饼图颜色