npm 包 @bhvr/pact-node 使用教程

阅读时长 9 分钟读完

在前端开发中,需要进行单元测试和集成测试,而 Pact 就是一款流行的契约测试框架。Pact 在进行测试过程中,根据契约规定了消费者和提供者应该遵守的协议,从而避免了接口的错误和不一致性。Pact 还通过 API 端点来检测所复制的运行状态,因此它非常适合于微服务架构。

在这篇文章中,我们将介绍 npm 包 @bhvr/pact-node 的使用教程,以帮助你更方便地进行 Pact 的单元测试和集成测试。

安装

首先,在你的代码根目录中运行下面的 npm 命令:

这将会安装 @bhvr/pact-node 的最新版本到你的项目中。

准备工作

在你开始使用 @bhvr/pact-node 前,你需要先准备以下工作:

  1. 在 test 源代码目录下创建对应的生产者和消费者目录,如下:
  1. 在每个目录下创建 package.json 文件和相关代码。
  2. 生产者在 package.json 版本信息中添加 "pact": {"port": 1234},其中 1234 为你要使用的 Pact 服务器端口。这能够确保在测试时使用相同的端口。

在这个例子中,我们将使用默认端口 1234。

创建 Consumer 契约测试

首先,我们需要编写一个消费者契约测试,这个测试用来检测消费者请求数据是否符合契约规定。假设我们要测试以下代码:

首先,我们需要创建契约测试。在 test/consumer 目录下创建一个新的 JavaScript 文件,例如:user_consumer.test.js。

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

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

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

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

    ----------------------------
    -------------------------------
  --
--
展开代码

在这个消费者契约测试中,我们使用了 @bhvr/pact-node 的 Verifier 类来验证我们的消费者是否遵守了契约规范。verifyProvider() 方法使用 Pact 服务器的记录,对生产者端点访问进行拦截,以验证消费者契约。

在生产者端,我们需要为其创建一个 Pact 契约来记录一些契约规定和提供者假设。在创建 Pact 契约之前,我们需要安装 @pact-foundation/pact-node 包。

创建 Provider 契约测试

在 test/provider 目录下创建一个 JavaScript 文件,例如:user_service-provider.test.js。

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

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

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

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

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

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

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

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

      ----- -----------------
    --
  --
--
展开代码

在生产者契约测试中,我们使用了 @pact-foundation/pact 软件包来创建一个 Pact 契约并添加一个互动以描述到提供者端点的请求。通过调用 provider.verify() 来结束契约测试。如果契约测试通过,则会创建相应的 Pact 文件,它定义你的消费者和提供者之间的规格。它还将验证您的消费者是否遵守这个规范。

现在,我们的测试集成完成了,只需要运行消费者契约测试:

和生产者契约测试:

即可开始 Pact 框架的单元测试和集成测试。

完整示例代码:

Consumer 契约测试

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

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

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

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

    ----------------------------
    -------------------------------
  --
--
展开代码

Provider 契约测试

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

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

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

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

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

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

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

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

      ----- -----------------
    --
  --
--
展开代码

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