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

在前端开发中,需要进行单元测试和集成测试,而 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


猜你喜欢

  • npm 包 @adfinis-sygroup/semantic-release-config 使用教程

    简介 随着前端开发团队和项目数量的增加,版本控制和发布管理变得越来越重要。而 Semantic Versioning(语义化版本控制)规范能够解决版本号混乱和冲突的问题。

    5 年前
  • npm 包 @6river/commitlint-config-6river 使用教程

    前言 在团队协作开发中,遵循一定的代码规范是非常重要的。其中,Commit message 规范是团队协作及代码维护的基础。使用 @6river/commitlint-config-6river 包可...

    5 年前
  • npm 包 @1stg/commitlint-config 使用教程

    前言 在开发过程中,为了团队协作和代码管理的需求,我们需要对代码 commit 进行规范和约束。commitlint 就是一个很好的工具来解决这个问题。而 @1stg/commitlint-confi...

    5 年前
  • npm 包 conventional-changelog-conventionalcommits 使用教程

    前言 在前端开发过程中,随着工程化的发展,我们越来越需要一个可靠的版本控制工具,对于一个开源项目来说,一个规范的版本控制是更为必要的。而 conventional-changelog-conventi...

    5 年前
  • npm 包 @feiyuerenhai/nut 使用教程

    在前端开发中,使用 npm 包可以极大地提升开发效率和简化工作流程。本文介绍 @feiyuerenhai/nut 这个 npm 包的使用教程,帮助开发者更好地掌握此工具,提高工作效率。

    5 年前
  • npm 包 @adactive/kiosk-react-scripts 使用教程

    前言 @adactive/kiosk-react-scripts 是一款前端工程化工具,旨在简化 React 应用程序的开发和部署流程。该工具提供了默认配置和开箱即用的功能,包括 Webpack 配置...

    5 年前
  • npm 包 @ampersandhq/magepack-sdk 使用教程

    简介 @ampersandhq/magepack-sdk 是一个基于 Magepack 的 JavaScript SDK,可以在前端页面中轻松使用 Magepack 的功能。

    5 年前
  • npm 包 @elastic/babel-preset-kibana 使用教程

    如果你正在开发一个基于 Kibana 的 web 应用程序,那么你一定会对 @elastic/babel-preset-kibana 这个 npm 包感兴趣。这个包是一个 Babel 预设,它包含了许...

    5 年前
  • npm 包 @egis/build-tools 使用教程

    前言 在前端开发的过程中,构建工具的使用是非常必要的。而 @egis/build-tools 是一个非常优秀的构建工具,它能够帮助我们快速搭建一个适合自己的前端工程。

    5 年前
  • npm 包 babel-preset-es2015-mod 使用教程

    随着前端工具的不断更新,现在不少工具已经能支持 ES6 及以上的新特性,但是部分浏览器并不支持这些新特性,这时候就需要使用 Babel 这样的工具将代码转换成 ES5 语法,以便同时兼顾浏览器的兼...

    5 年前
  • npm 包 u-test 使用教程

    前言 在前端开发过程中,编写高质量的代码是非常重要的,而编写高质量代码的前提是必须有良好的测试覆盖率。测试可以保证我们的代码不会在生产环境出现错误,可以提前预防潜在的问题,同时也方便我们在开发过程中进...

    5 年前
  • npm 包 cody-cli 使用教程

    cody-cli 是一个基于 Node.js 平台的命令行工具,可以用来快速创建和管理前端项目。cody-cli 支持使用多种框架,例如 React 和 Vue 等。

    5 年前
  • `npm` 包 @dlghq/babel-preset-dialog 使用教程

    前言 在开发前端项目时,我们可能需要对现代JavaScript语法进行转换,以让我们的代码在不同的环境中得到更好的兼容性。在这种情况下,我们通常会选择使用 Babel 作为我们的转换工具。

    5 年前
  • npm 包 @dinoboff/babel-preset-stage-4 使用教程

    前言 在现代化的 Web 开发中,前端应用经常涉及到最新的 ECMAScript 标准。为了能够编写符合当前标准的 JavaScript 代码,并让它在现代化的浏览器中运行,我们需要使用 Babel ...

    5 年前
  • npm 包 @ava/babel-preset-stage-4 使用教程

    @ava/babel-preset-stage-4 是一个用来构建前端项目的 JavaScript 编译器,可以把 ES6/7/8/9 代码转换成 ES5 代码。这个 npm 包包含了 babel-p...

    5 年前
  • npm 包 @babel/plugin-transform-exponentiation-operator 使用教程

    简介 @babel/plugin-transform-exponentiation-operator 是一个 Babel 转换插件,用于将 ES2016 中的幂运算符(**)转换成 ES5 中的 Ma...

    5 年前
  • npm 包 react-scrollbars-custom 使用教程

    随着 Web 应用程序越来越复杂,滚动条已成为用户界面设计的必要组成部分。然而,浏览器提供的默认滚动条往往较难修改和自定义,不能满足开发者的需求。而 npm 包 react-scrollbars-cu...

    5 年前
  • npm 包 @babel/plugin-transform-property-literals 使用教程

    在现代 web 开发中,前端工程师们经常需要使用到各种不同的工具和框架来提高开发效率和代码质量。其中,Babel 是一个非常流行的工具,它可以将最新的 JavaScript 语法转换为大多数浏览器都支...

    5 年前
  • npm 包 @babel/plugin-transform-member-expression-literals 使用教程

    在前端开发中,我们经常会使用 JavaScript 语言。然而,在开发过程中,我们会遇到一些问题,例如代码的可读性不高,浏览器兼容性问题等等。解决这些问题的方法之一是使用 Babel 转码器。

    5 年前
  • npm 包 @babel/plugin-proposal-nullish-coalescing-operator 使用教程

    介绍 在 JavaScript 中,当我们想要给一个变量赋一个默认值,或者想要在变量为空或者为 null 或 undefined 的时候给它赋一个默认值,通常我们会使用三元运算符或者逻辑或运算符。

    5 年前

相关推荐

    暂无文章