# @12-apps/payments-e2e 中文文档

规范地址：https://npmcn.com/package/%4012-apps/payments-e2e/

版本：2\.12\.0
npm 元数据更新时间：2026-11-05T03:01:32.105Z
中文译文更新时间：2026-11-05T21:01:06.386Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%4012-apps/payments-e2e
原文对照：https://npmcn.com/package/%4012-apps/payments-e2e/?lang=original
项目主页：https://github.com/12-apps/shared-packages#readme
源码仓库：https://github.com/12-apps/shared-packages

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：197 kB，85 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：playwright-bdd \>=8\.0\.0，@playwright/test \>=1\.40\.0
- 首次发布：2026-08-07T21:38:34.882Z
- 最新版本发布：2026-11-05T03:01:31.571Z
- 近 30 天下载量：22375（2026-10-04 至 2026-11-02，npm 官方下载统计）
- 已发布版本数：25（近 12 个月 25 个）

## 中文简介

付款买家的行程,因为Gherkin 东道主运行 自己的应用

## 安装

```sh
npm install @12-apps/payments-e2e
```

也可以使用：`pnpm add @12-apps/payments-e2e`、`yarn add @12-apps/payments-e2e`、`bun add @12-apps/payments-e2e`

## README

# `@12-apps/payments-e2e`

买家去付账,因为Gherkin你跑 **反对你 自己的应用程序**。 。 。 .

正在挂载 `createPaymentFlows` 给你退房 这个给你 端到端覆盖: 13个特征的36种情景——PIX,卡片, 数字钱包,主机交接和返回,供应商故障,发行器 倒闭,一个未解决的收费, 一个商店,完全无法收费, 每个提供者屏幕,在退票外保存一张卡,激活一个提供者 包括核查费、死亡的OAuth赠款及其重新连接费和 以主机平台名发声的设置指南. 另有5个设想 以两个特征覆盖平台-操作表面,在它们自己的背后 选入端口( o)[下级](https://npmcn.com/package/%4012-apps/payments-e2e/#readme-the-platform-operations-journeys-opt-in)()——41人进入 都说吧 您执行一个端口并添加三行配置 。 没有复制,所以在此添加一个假想 之后在您的应用程序中运行 在下一个版本的起伏.

## 为什么一个港口

这些假设是可移植的,因为其中的每一项断言都读取了测试id 付款部分本身使: `card-number`, (中文(简体) ), `list-option-CARD`, (中文(简体) ), `pix-code`, (中文(简体) ), `payment-paid` 每个消费者都一样.

这是什么 **没有** 便携就是周围的一切: 你的应用如何通向一个 检查,一个特定形状的商家是如何存在的,在哪里记录 穿过电线的东西 这,只有,是 `PaymentsWorld`。 。 。 .

## 把它连接起来

**1\. 实施港口**在自己的模块中 `steps` 缩写 :

```ts
// tests/e2e/steps/payments-world.ts
import { definePaymentsWorld } from '@12-apps/payments-e2e';

definePaymentsWorld({
  // Put the browser on a checkout for a store of this shape.
  open: async (page, store) => { /* route + seed however you do */ },
  raiseHostedPayable: async (page) => { /* …and wait for the interstitial */ },
  returnFromProvider: async (page) => { /* a real return trip */ },
  hostedReturnStatus: (page) => page.getByTestId('…'),
  authorizeOAuth: async (page) => { /* play the provider's consent screen */ },
  fixtures: { headProvider, tailProvider, hostedUrlFragment, payableRef, taxId, platformBrand, oauthProvider },
  wire: {
    paths, chargeKeys, chargeBody, tokensByProvider, providerCharges, providerChargeCount, navigated,
    connectionStatus, connectionEnabled, rotation, heartbeat /* optional */,
  },
});
```

它必须生活在 `steps` glob 因为剧作家 bdd 导入每个步骤文件 第一次选举之前 `Given` 运行——这是在每一阶段的世界记录 工人们.

**2\. 将你的bdd配置指向包:**

```ts
import { paymentsFeatures, paymentsFeaturesRoot, paymentsSteps } from '@12-apps/payments-e2e';

const journeys = defineBddConfig({
  features: [paymentsFeatures, 'tests/e2e/features/**/*.feature'],
  featuresRoot: paymentsFeaturesRoot,
  steps: [paymentsSteps, 'tests/e2e/steps/**/*.ts'],
  outputDir: '.features-gen',
});
```

自己留着吧 `steps` 列表中的缩略语——这就是你的 `definePaymentsWorld` 召唤生命.

### 有三件事你搞错了就失败了

这些不是风格笔记。 每个都产生一个 **绿色跑道,零行程**, (中文(简体) ), 这比红的还糟.

-   **使用导出的缩写, 不用手写 `node_modules/…` 路径.** {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}嗯 不错 {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}嗯 存储为嵌入式,工作空间链接不是您可以猜测的目录。 一个光彩 没有匹配的bddgen 编译它发现的,什么都没有 运行通行证.
-   **设定 `featuresRoot`。 。 。 .** bddgen 镜像每个特性的路径相对它. 左边 未设置, 切片编译为 `.features-gen/node_modules/@12-apps/payments-e2e/…`, (中文(简体) ), 和 Playwright 默认值 `testIgnore` 丢弃包含的每个路径 `node_modules`. 编辑了7个特性,零收集,绿色.
-   **记起你的旅程.** 不管什么机制,放个支票 你所期望的情景数.

### 什麽 `open` 必须离开屏幕

对于退房形状, `open` 与购买者返回 **单项付款列表** (单位:千美元)`payment-list`从 `paymentList`),商店的退市配置已经 已经解决 **文件没有 CPF**: 组合步骤类型 帕加门托`list-buyer-taxId`) 当列表要求一个时,选择一行 (单位:千美元)`list-option-<METHOD>-radio`并按下栏杆(`list-pay`) (中文(简体) ). 每次买 通过这个列表(FUT-4028),所以它是旅行证明的屏幕.

关于名单的四件事 东道主必须规定:

-   **每家有Pix银行流量的商店** (单位:千美元)`pixBank`复制代码的原样 生成并降落在复制后的脸。 在电脑上,不再面对 绘制代码,所以检查步骤读取买方的剪贴板. 单位 `open`,对于每个商店的列表 `pixBank`页面 `clipboard-read` 财务报告和审定财务报表 `clipboard-write`,并清空剪贴板 (单位:千美元)`navigator.clipboard.writeText('')`在结账之前,所以代码 先前复制的无法通过 .
-   **"什么都没有写"需要现场探测器.** 在一家不能收费的商店里, 步骤读取 `wire.paths` 用于一个短窗口, 并且任何文字都失败 。 这个 证明探测器是先录制的 执行 `wire.heartbeat`一个知道 通过录音机读取您的取出用途, 返回行它 记录。 没有它,探测器必须 持有读取;空探测器是 从来没有接受.
-   **充值卡等五秒钟** 在清单的收费栏后面 发送。 给上面的预计超时空间(吊带使用15s).
-   **纸牌是 `list-option-CARD`。 。 。 .** 一张牌的牌被分了 提取资金 `list-option-CARD-CREDIT` 财务报告和审定财务报表 `list-option-CARD-DEBIT` 相反, 和卡片步骤之间没有选择.

链条要求的其他字段(手机、名称、电子邮件)是 关于你建的商店的事实,所以 `open` 充满他们。 一个有CPF档案的买家 得到支付线 而不是CPF 字段, 所以不要带一个。 这个 Dados 台阶和Pix/Cartão 标签 曾经驾驶的台阶都从这里走了 `@12-apps/payments-frontend` (FUT-4028),他们的分行也在这里.

## `PaymentsStore` ——一种情景所要求的形状

一个场景命名为商家;你决定如何生产出商家。 一把绳子 在页面中宣布一个供应商链;真正的商店前种子是租户。 特点 文件不会以两种方式更改.

`pix-only` • 妇女 `card` • 妇女 `both-methods` • 妇女 `hosted` • 妇女 `awaiting` • 妇女 `settles` • 妇女 `declined` • 妇女 `unresolved` • 妇女 `unavailable` • 妇女 `no-provider` • 妇女 `no-provider-remedy` • 妇女 `payments-off` • 妇女 `two-mintable` • 妇女 `redirect-head` • 妇女 `google-pay` • 妇女 `apple-pay` • 妇女 `apple-pay-unsupported` • 妇女 `wallet` • 妇女 `activation` • 妇女 `screen-on-page` • 妇女 `screen-handoff` • 妇女 `screen-undeclared` • 妇女 `screen-unknown` • 妇女 `setup-guide` • 妇女 `reconnect-required`

添加成员是主机的突破性变化, 刻意: 需要的情景 没有人能建造的商店 是一个默默无闻的场景.

`wallet` (为FUT-183/FUT-478所添加)是属于以下类别的成员之一: **没有a 离职**数字 : `open(page, 'wallet')` 必须让买家在货包上着陆 管理卡表面( u)`screens.ManageCards` 从 `createPaymentFlows`a 时 存储其单一提供者可以金库的库-链头宣布适配器 `vault` 接合,连接以 stub 模式运行,钱包开始为空 . 行程类型 : `DECLINE_PAN` 拒绝路径,所以没有存储 旗帜决定结果;卡片决定结果。 整个版本的主机升级 成员必须加入成员 `open` 地图或者他们的世界停止编译—— 这就是重点.

`activation` (加到FUT-689)是另一个,第一个 **管理员**\-边 形状 : `open(page, 'activation')` 必须在 OWNER 设置面板上降落 一个提供者宣布 `activationCharge`,以 stub 模式连接,并 从未充电——销售开关开始锁定. 主持人 `renderVerification` 槽必须使共享的卡表加上 `activation-*` 测试标识 `src/steps/activation.steps.ts` 文档(支付按钮, 结果,退款线, 和原始的启用试探对。 一样 `wallet`, (中文(简体) ), 输入卡决定结果 : `DECLINE_PAN` 以名称拒绝 理由,任何其它支付 分钱并获得退款.

## 为什么这个软件包船编译了 JavaScript

其弟妹出道为生 `.ts` 通过其 `exports` 地图,因为 应用程序的 **捆绑器** 吞噬他们,并折射出一切迹象 临Τ 这些文件由 **节点** -  `playwright.config.ts` 进口 此模块和 bddgen 导入步骤文件 。 节点拒绝剥去类型 从任何下 `node_modules` (单位:千美元)`ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING`) (中文(简体) ). Playwright 自己的 TS 转换 也不救他们;它跳过 `node_modules` 根据设计.

船运来源将制作一个包 核对、公布, 安装,然后进行首次测试.

## 平台操作之行 (opt-in)

买方在任何挂起出票的应用程序上行走。 一秒钟, **单独** 设定覆盖运行 PLATFORM 的应用程序 连接应用程序咨询屏幕和平台 (单位:千美元)`ConnectApplicationPanel` 编号 : `PlatformHomologacao` 从 `@12-apps/payments-frontend`) (中文(简体) ). 大多数退房消费者没有这样的表面, 因此,这些船在自己的港口后面, 并被三分之一地遮住: 内 `paymentsFeatures` 或者说 `paymentsSteps`一个从未列出它们的宿主 无所未有.

```ts
// tests/e2e/steps/platform-world.ts — inside your super-admin steps glob
import { definePaymentsPlatformWorld } from '@12-apps/payments-e2e';

definePaymentsPlatformWorld({
  openConnectApplication: async (page, shape) => { /* sign in + route */ },
  openHomologacao: async (page, shape) => { /* sign in + produce the shape */ },
});
```

```ts
import {
  paymentsPlatformFeatures,
  paymentsPlatformFeaturesRoot,
  paymentsPlatformSteps,
} from '@12-apps/payments-e2e';

defineBddConfig({
  features: [paymentsPlatformFeatures],
  featuresRoot: paymentsPlatformFeaturesRoot,
  steps: [paymentsPlatformSteps, 'tests/e2e/steps/**/*.ts'],
  outputDir: '.features-gen/platform',
});
```

相同的三个无声失败是逐字应用的——使用导出光谱,设置 `featuresRoot`坚持你的假设数。 还有 `openHomologacao` 必须 制作它的外形,不只是导航: 一个情景记录了一个结果,所以 待会 `unrequested` 打开必须再次清除它.

## 用相同的词汇书写你自己的规格

买家的手势也是出口的,所以手写在旅途旁 读取方式相同:

```ts
import { fillCard, payCard, reachPayment, VALID_CPF } from '@12-apps/payments-e2e';
```

## 常见问题

### @12-apps/payments-e2e 是什么？

付款买家的行程,因为Gherkin 东道主运行 自己的应用

### 如何安装 @12-apps/payments-e2e？

在项目目录运行 npm install @12-apps/payments-e2e，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：playwright-bdd（\>=8\.0\.0）、@playwright/test（\>=1\.40\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @12-apps/payments-e2e 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @12-apps/payments-e2e 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @12-apps/payments-e2e 可以商用吗？

@12-apps/payments-e2e 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @12-apps/payments-e2e 的下载量有多少？

根据 npm 官方下载统计，@12-apps/payments-e2e 在 2026/10/04 – 2026/11/02 这 30 天内被下载 22,375 次，日均约 746 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @12-apps/payments-e2e 还在维护吗？

最新版本 2\.12\.0 发布于 2026/11/05（1 天前）；至今共发布 25 个版本，其中过去 12 个月发布了 25 个；首次发布于 2026/08/08。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

