如何使用 Chai 测试 GraphQL API

阅读时长 7 分钟读完

GraphQL API 是一种强大的 API 类型,它允许您以更好的方式查询和获取数据。但是,为了确保 API 的正确性和稳定性,我们需要进行测试。在本文中,我们将使用 Chai 来测试 GraphQL API。

Chai 简介

Chai 是一个流行的 JavaScript 测试库,它提供了一种易于使用的断言语法,可以轻松地编写测试用例。它支持多种风格,包括 BDD、TDD 和 QUnit,可以与不同的测试框架一起使用。

准备工作

在开始之前,我们需要安装一些必要的软件包。我们将使用以下软件包:

  • chai:用于编写测试用例的断言库
  • mocha:用于运行测试用例的测试框架
  • supertest:用于测试 HTTP 请求的库
  • graphql:用于编写和运行 GraphQL 查询的库

您可以使用 npm 或 yarn 来安装这些软件包。在您的项目目录中运行以下命令:

或者

编写测试用例

现在我们已经安装了必要的软件包,我们可以开始编写测试用例了。我们将测试一个简单的 GraphQL API,它允许我们查询和获取一些用户数据。

编写 API

首先,我们需要编写一个简单的 GraphQL API。在您的项目目录中创建一个名为 server.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

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

在上面的代码中,我们定义了一个名为 User 的类型,它包含 idnameemail 字段。我们还定义了一个名为 Query 的类型,它允许我们查询用户数据。我们使用 buildSchema 函数来创建 schema。

我们还模拟了一些用户数据,并定义了一个名为 users 的 resolver,它返回用户数据。我们使用 Express 创建了一个应用程序,并添加了 GraphQL 中间件。我们使用 graphqlHTTP 函数来创建一个 GraphQL 服务器,并将其挂载到 /graphql 路径上。我们还启动了应用程序,并将其监听在端口 3000 上。

编写测试用例

现在我们已经编写了一个简单的 GraphQL API,我们可以开始编写测试用例了。在您的项目目录中创建一个名为 test.js 的文件,并添加以下代码:

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

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

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

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

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

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

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

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

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

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

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

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

在上面的代码中,我们首先导入了必要的软件包,包括 chaisupertestgraphql。我们还导入了我们的 schema 和 resolver。我们使用 makeExecutableSchema 函数来创建一个可执行 schema。

我们还创建了一个名为 query 的函数,它允许我们通过 HTTP 请求来测试我们的 API。我们使用 request 函数来发送 HTTP 请求,并使用 graphql 函数来执行 GraphQL 查询。我们还编写了两个测试用例,它们测试我们的 API 是否能够正确地返回用户数据。第一个测试用例使用 graphql 函数来测试 API,而第二个测试用例使用 query 函数来测试 API。

运行测试用例

现在我们已经编写了测试用例,我们可以使用 Mocha 来运行它们。在您的项目目录中运行以下命令:

或者

如果一切正常,您应该会看到测试用例通过了。

结论

在本文中,我们学习了如何使用 Chai 来测试 GraphQL API。我们编写了一个简单的 GraphQL API,并编写了测试用例来测试它。我们使用了 chaimochasupertestgraphql 等软件包来编写测试用例。测试是保证 API 正确性和稳定性的重要手段,希望本文能够帮助您更好地进行 GraphQL API 测试。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6756f25c6c15453263045913

纠错
反馈