对不同 GraphQL 类型进行测试的最佳实践

GraphQL 是一种用于 API 的查询语言,它提供了一种更加高效、强大和灵活的方式来获取数据。GraphQL 的核心是类型系统,它定义了可用的类型和它们之间的关系。在编写 GraphQL 代码时,我们需要对不同的类型进行测试,以确保它们的行为符合预期。本文将介绍对不同 GraphQL 类型进行测试的最佳实践,包括标量、对象、接口和联合类型。

标量类型

标量类型是 GraphQL 中最简单的类型,它们表示基本的数据类型,如整数、浮点数、字符串和布尔值。在测试标量类型时,我们需要确保它们的值符合预期。以下是一个测试字符串类型的示例代码:

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

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

在上面的示例中,我们使用了 Jest 和 graphql-js 库来测试 GraphQL 查询。我们编写了一个查询,它将返回一个字符串类型的值。然后,我们使用 graphql 函数将查询和模式传递给 GraphQL 引擎,并检查返回的值是否为 'world'。

对象类型

对象类型是 GraphQL 中最常见的类型,它们表示复杂的数据结构,由多个字段组成。在测试对象类型时,我们需要确保每个字段都返回预期的值。以下是一个测试对象类型的示例代码:

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

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

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

在上面的示例中,我们编写了一个查询,它将返回一个 User 类型的值。我们使用 graphql 函数将查询和模式传递给 GraphQL 引擎,并检查返回的值是否与预期值匹配。

接口类型

接口类型是 GraphQL 中定义共享字段的一种方式。它们允许我们定义一个接口,然后让多个类型实现它。在测试接口类型时,我们需要确保每个实现都返回预期的值。以下是一个测试接口类型的示例代码:

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

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

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

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

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

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

在上面的示例中,我们定义了一个 Node 接口和两个实现:User 和 Post。我们编写了两个查询,分别测试 User 和 Post 实现的字段。我们使用 graphql 函数将查询和模式传递给 GraphQL 引擎,并检查返回的值是否与预期值匹配。

联合类型

联合类型是 GraphQL 中定义多个类型的一种方式。它们允许我们定义一个联合类型,然后让多个类型成为它的成员。在测试联合类型时,我们需要确保每个成员都返回预期的值。以下是一个测试联合类型的示例代码:

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

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

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

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

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

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

在上面的示例中,我们定义了一个 SearchResult 联合类型和两个成员:User 和 Post。我们编写了两个查询,分别测试 User 和 Post 成员的字段。我们使用 graphql 函数将查询和模式传递给 GraphQL 引擎,并检查返回的值是否与预期值匹配。

总结

在编写 GraphQL 代码时,对不同类型进行测试是非常重要的。本文介绍了对标量、对象、接口和联合类型进行测试的最佳实践,并提供了示例代码。我们希望这些实践能够帮助您编写更健壮的 GraphQL 代码,并确保它们的行为符合预期。

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