使用 Mocha 测试 GraphQL

GraphQL 是一种针对 API 的查询语言,它提供了一种更有效、强大且灵活的方式来构建 API。基于 GraphQL 的服务具有清晰的数据约定,因此相比于传统的 RESTful API 更易于维护和迭代。在前端开发中,我们通常会使用 GraphQL 与后端进行数据交互。当我们对 API 进行修改时,我们需要确保我们的重构不会对前端在使用 API 时产生任何问题,这时就需要进行测试了。

在本篇文章中,我们将介绍如何使用 Mocha 对 GraphQL 进行测试。我们将首先介绍 Mocha 的基础知识,然后介绍如何使用 Mocha 进行 GraphQL 测试、如何模拟数据和如何使用 Mochawesome 进行测试报告生成。

Mocha 基础知识

Mocha 是一个功能齐全、灵活的 JavaScript 测试框架,支持运行在浏览器和 Node.js 环境下。Mocha 可以与多种断言库协作使用,如 chai、assert 和 should。Mocha 提供了非常完善的功能,例如异步测试、监视模式、测试报告生成等等。

安装 Mocha

首先,我们需要全局安装 Mocha。

--- ------- -- -----

创建测试文件

接下来,我们创建一个测试文件夹:test,并在其中创建测试文件 graphql.test.js

----- ----
----- --------------------

编写测试用例

我们可以使用 describe 和 it 函数来编写测试用例。describe 函数用于定义测试套件,可以包含多个测试用例。it 函数用于定义测试用例。我们可以在 it 函数中使用断言库来验证预期结果是否与实际结果一致。下面是一个简单的示例:

----------------- ---------- -
  ---------------------- ---------- -
    ---------- ------ -- ---- --- ----- -- --- --------- ---------- -
      -------------------------------- ----
    ---
  ---
---

在测试 GraphQL 时,我们可以使用类似上面的示例,但需要创建 GraphQL 客户端并使用客户端查询我们的 API。我们将使用 graphql-request 库来创建 GraphQL 客户端。我们也需要创建测试用例前设置服务器。

设置服务器

我们将使用 express-graphql 启动 GraphQL 服务器。以下是实现此功能的示例代码:

----- ------- - -------------------
----- - ----------- - - ---------------------------
----- - ----------- - - -------------------

-- --------- - ------- ----- ------- ------ --------
----- ------ - -------------
  ---- ----- -
    ------ ------
  -
---

-- --- ---- -------- - -------- -------- --- ---- --- --------
----- ---- - -
  ------ -- -- -
    ------ ------ --------
  --
--

----- --- - ----------
--------
  -----------
  -------------
    ------- -------
    ---------- -----
    --------- -----
  --
--
---------------- -- -- ---------------- ------ -- ---------------------------------

创建 GraphQL 客户端

在测试 GraphQL API 时,我们需要创建一个 GraphQL 客户端来向服务器发出请求。我们将使用 graphql-request 库来创建客户端。

----- - ------- - - ---------------------------

----- -------- - --------------------------------

----- ----- - -
  -
    -----
  -
--

----------------- ------------------ -- -------------------

在上述示例中,我们使用 request 函数创建了一个 GraphQL 客户端,并使用 endpoint 执行了一个简单的查询。

创建一个简单的测试用例

下面让我们通过一个简单的测试用例来了解如何使用 Mocha 对 GraphQL 进行测试。我们编写一个测试用例,查询 hello 字段并验证返回值是否正确。

----- - ------ - - ----------------
----- - ------- - - ---------------------------

----- -------- - --------------------------------

----------------- -- -- -
  ---------- ------ ----- ------- ----- -- -- -
    ----- ----- - -
      -
        -----
      -
    --
    ----- ---- - ----- ----------------- -------
    ---------------------------------- ---------
  ---
---

在上面的测试用例中,我们使用 expect 函数来验证返回值是否等于 'Hello world!'。在代码中,我们使用 asyncawait 关键字来异步执行查询。

模拟数据

有时我们需要在测试中使用特定的测试数据,这时我们可以使用 graphql-tools 库中的 addMockFunctionsToSchema 方法来模拟数据。该方法将在 GraphQL Schema 上添加模拟函数,并将其用作数据源。下面是一个简单的示例。

----- - ------- - - -------------------
----- - ------------------------- -------------------- - - -------------------------

----- -------- - -
  ---- ----- -
    ------ ------
  -
--

----- ------ - ---------------------- -------- ---

-------------------------- ------ ---

--------------- -- ----- ------------------- -- -----------------------

在上面的示例中,我们使用 makeExecutableSchema 函数创建一个简单的 Schema,然后使用 addMockFunctionsToSchema 方法添加一个模拟函数,并使用 graphql 函数对 'hello' 查询进行了验证。

除了 addMockFunctionsToSchema,还有很多其他的 Mock 库,例如 mockingoose,它可以用于模拟返回值并与 Mocha 一起使用,以实现有效的测试。

使用 Mochawesome 生成测试报告

Mochawesome 是一个漂亮的 HTML 报告生成工具,可以提供测试的详细信息和统计指标。它还提供了简单的配置选项,例如输出位置和文件名。下面是简单示例。

----- ----- - -----------------
----- ----------- - ----------------------------------------

----- ----- - --- -------
  --------- --------------
  ---------------- -
    ---------- ----------------------
    --------------- --------
    --------- -----
  --
---

--------------------------------------

-------------------- -- -
  -- -------- --- ------
  --------------------------
    ------- -----
    ---------- ----------------------
    --------------- --------
  ---
---

在上述示例中,我们使用 mochawesome-report-generator 生成测试报告,并将其输出到报告目录中。在 reporterOptions 中,我们可以定义报告的输出信息。

结论

在本篇文章中,我们介绍了如何使用 Mocha 执行 GraphQL 测试,并使用 graphql-request 库执行查询。我们还讨论了如何使用 addMockFunctionsToSchema 模拟数据。最后,我们介绍了如何使用 Mochawesome 生成漂亮的 HTML 报告。我们希望这篇文章对开发人员有所帮助,并提升了对 GraphQL 测试的理解和实践。

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