如何使用 Mocha 测试 GraphQL 应用程序

介绍

Mocha 是一个 JavaScript 测试框架,被广泛用于前端和后端应用程序的测试。GraphQL 是一种查询语言,用于API的构建。本文将介绍如何使用 Mocha 对 GraphQL 应用程序进行测试。

安装

为了使用 Mocha,我们需要在项目中安装它。我们可以使用 npm 来安装 Mocha:

npm install --save-dev mocha

安装好后,我们可以创建一个测试目录并写测试。

编写测试

在测试目录中,我们可以创建一个 JavaScript 文件,来编写测试代码。下面是一个简单的测试示例,测试查询某个用户的信息:

const assert = require('assert');
const { graphql } = require('graphql');
const schema = require('../schema');

describe('User', function() {
  it('should return user info', async function() {
    const query = `
      query getUser(id: "1") {
        user(id: "1") {
          id
          name
          email
        }
      }
    `
    const result = await graphql(schema, query);

    assert.equal(result.errors, undefined);
    assert.equal(result.data.user.id, '1');
    assert.equal(result.data.user.name, 'John');
    assert.equal(result.data.user.email, 'john@example.com');
  });
});

在这段代码中,我们首先引入了 assertgraphql。然后,我们导入了我们的 GraphQL Schema,这是我们的应用程序的定义之一。我们使用 describeit,来定义我们的测试。

it 中,我们定义我们的查询,这是我们要测试的目标。我们使用 graphql 函数来执行查询,并断言查询结果是否满足我们期望的值。在这个例子中,我们测试查询用户信息,期望用户id为1,姓名为John,邮箱为john@example.com

运行测试

在我们编写好测试后,可以运行测试来验证我们的应用程序是否正常。我们可以在命令行中运行 mocha 命令,来运行我们的测试:

mocha test/user.js

在这个命令中,test/user.js 是我们要运行测试的文件路径。

如果所有的测试通过,我们应该看到类似下面这样的输出:

User
  ✓ should return user info

1 passing (50ms)

如果有任何测试失败,我们会看到失败的信息。

总结

在本文中,我们介绍了如何使用 Mocha 来测试 GraphQL 应用程序。我们首先安装了 Mocha,然后编写了一个简单的查询测试,并运行了这个测试。我们的测试完美通过了,说明我们的应用程序正常。在实际开发中,我们应该写更多测试来验证应用程序的不同部分和功能。

示例代码

下面是一个完整的代码示例,用于测试一个名为 schema 的 GraphQL Schema:

const assert = require('assert');
const { graphql } = require('graphql');
const schema = require('../schema');

describe('User', function() {
  it('should return user info', async function() {
    const query = `
      query getUser(id: "1") {
        user(id: "1") {
          id
          name
          email
        }
      }
    `
    const result = await graphql(schema, query);

    assert.equal(result.errors, undefined);
    assert.equal(result.data.user.id, '1');
    assert.equal(result.data.user.name, 'John');
    assert.equal(result.data.user.email, 'john@example.com');
  });
});

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b0b184add4f0e0ffa0b511