# @bifravst/bdd-markdown 中文文档

规范地址：https://npmcn.com/package/%40bifravst/bdd-markdown/

版本：9\.0\.5
npm 元数据更新时间：2026-10-30T11:40:08.441Z
中文译文更新时间：2026-11-09T20:36:16.566Z
软件包许可：BSD-3-Clause

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

原始 npm 页面：https://www.npmjs.com/package/%40bifravst/bdd-markdown
原文对照：https://npmcn.com/package/%40bifravst/bdd-markdown/?lang=original
项目主页：https://github.com/bifravst/bdd-markdown#readme
源码仓库：https://github.com/bifravst/bdd-markdown

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

- 包体积（解压后）：178 kB，175 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=24\.22\.1 \<25 \|\| \>=26\.12\.1 \<27
- 运行依赖：5 个
- 首次发布：2024-07-12T21:07:30.410Z
- 最新版本发布：2026-10-30T11:40:08.054Z
- 近 30 天下载量：1743（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：87（近 12 个月 12 个）

## 中文简介

在Markdown中写入BDD测试.

## 安装

```sh
npm install @bifravst/bdd-markdown
```

也可以使用：`pnpm add @bifravst/bdd-markdown`、`yarn add @bifravst/bdd-markdown`、`bun add @bifravst/bdd-markdown`

## README

# BDD 标记 [![npm version](https://img.shields.io/npm/v/@bifravst/bdd-markdown.svg)](https://www.npmjs.com/package/@bifravst/bdd-markdown)

[![Test and Release](https://github.com/bifravst/bdd-markdown/actions/workflows/test-and-release.yaml/badge.svg)](https://github.com/bifravst/bdd-markdown/actions/workflows/test-and-release.yaml) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) [![Renovate](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/) [![@commitlint/config-conventional](https://img.shields.io/badge/%40commitlint-config--conventional-brightgreen)](https://github.com/conventional-changelog/commitlint/tree/master/@commitlint/config-conventional) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier/) [![ESLint: TypeScript](https://img.shields.io/badge/ESLint-TypeScript-blue.svg)](https://github.com/typescript-eslint/typescript-eslint)

在Markdown中写入BDD测试.

## 思想

写入 BDD 测试应该更舒适 [比这](https://github.com/bifravst/cloud-e2e-bdd-test-runner-example-js/blob/ca4f6e8c517c13f1c88abfdb6426c8ed6fe730e7/features/Webhook.feature), (中文(简体) ), 为什么不用Markdown? 它可以看着 [像这样](https://npmcn.com/package/%40bifravst/bdd-markdown/parser/test-data/feature/Example.feature.md)。 。 。 .

-   它是一个支持良好的文档格式,许多工具如自动格式 已经存在
-   它为构建分级文件提供了良好的工具
-   它支持嵌入源代码/ JSON 有效载荷,甚至表格
-   前置物质可用于特性级配置

## 历史

原BDD e2e特性跑道工程于2018年开工,该项目已经 证明对试验云内溶液非常有用。 更多关于 原创创意 [这里](https://github.com/bifravst/cloud-e2e-bdd-test-runner-js#motivation)。 。 。 . 然而,执行工作有一些缺陷。 特别是理解测试 成果以及处理状态和重复的方式并不理想。 临Τ 旧密码库本身没有足够覆盖 测试。 因此,这个 该项目于2022年启动,有4年的写作经验 运行测试。 有了一双新眼睛,写字的方法就完成了 从Gherkin改为Markdown 要求独立释放 项目.

## 实例

-   [支持语法的解析](https://npmcn.com/package/%40bifravst/bdd-markdown/parser/test-data/feature/Example.feature.md)
-   [盖克金 `Rule` 关键词](https://npmcn.com/package/%40bifravst/bdd-markdown/parser/test-data/feature/Highlander.feature.md)
-   [火星漫游者卡塔](https://npmcn.com/package/%40bifravst/bdd-markdown/examples/mars-rover/MarsRover.feature.md) (这个) 显示 `Soon` 重试步骤的关键字)  
    运行 : `$(set -o pipefail && node --no-warnings examples/mars-rover/tests.ts | node --no-warnings reporter/console-cli.ts)`
-   [固件 UART 日志断言](https://npmcn.com/package/%40bifravst/bdd-markdown/examples/firmware/RunFirmware.feature.md) (这证明使用 `Context`,这是一个全球对象 可供为测试运行提供运行时间设置,以替换 在阶梯标题和代码块中的占位符。 )  
    运行 : `$(set -o pipefail && node --no-warnings examples/firmware/tests.ts | node --no-warnings reporter/console-cli.ts)`

## 使用 `Soon` 关键词

让我们来看看这个情景:

```markdown
# To Do List

## Create a new todo list item

Given I create a new task named `My item`

Then the list of tasks should contain `My item`
```

如果您正在测试一个待办事宜列表系统, 那最终会一致吗 ?

更具体地说: 创建一个新任务是通过 `POST` 请求 返回 a 的 API `202 Accepted` 状态代码.

系统不能保证你刚刚创造的任务 _马上_ 可用.

这个 `Then` 断言将失败,因为它立即被执行.

为了测试最终一致的系统,我们需要等待一个合理的 足够时间或重试断言.

但是,如果你的测试套房里有很多类似的断言, 很快就会 加上长期时间.

因此,最有效的解决办法是重试这一说法,直到它过去, 或时出. 这样可以使用后退算法等待增加 更长时间,很多尝试 在测试运行期间,将拥有最少的量 对运行时间的影响.

执行适当的重新试验方式留待执行步骤, 不过,鼓励您使用下列方法标示这些最终步骤: `Soon` 关键词.

## 通过依赖关系控制特性执行命令

默认情况下, 这些特性不会按特定顺序加载 。 你个 _可能_ 试图 命令他们使用命名惯例,但可以强制进行排序 ,随着时间的推移,文件可能需要重新命名,以腾出空间 新的特性.

在此工程中, 特性可以指定对一个或多个其它特性的依赖性 ,在解析所有特性文件后,它们将被排序 [地形学](https://en.wikipedia.org/wiki/Topological_sorting)。 。 。 .

特征可以通过 `needs` 关键字 :

```markdown
---
needs:
  - First feature
---

# Second

## Scenario

Given this is the first step
```

此特性将在带有名称的特性后运行 `First feature`

## 运行中的特性 _第一个_ 财务报告和审定财务报表 _最后一个_

此外,功能可以指定是否应在所有其他功能之前运行 特征,或者毕竟。 多个关键字可以有此旗帜, 但依赖性 将优先.

### 示例:在所有其他特性之前运行一个特性

```markdown
---
order: first
---

# Runs before all others

## Scenario

Given this is the first step
```

### 示例:在所有其他特性之后运行一个特性:

```markdown
---
order: last
---

# Runs before all others

## Scenario

Given this is the first step
```

## 跳过特性

特性可以跳过, 这也会跳过所有依赖和瞬间 依赖性特性.

### 示例: 跳过一个特性

```markdown
---
run: never
---

# This feature never runs

## Scenario

Given this is the first step
```

## 只运行特定特性

功能可以完全运行, 这将运行所有依赖和 短暂的依赖性特征. 所有其他未标记为 `run: only` 将被跳过.

### 示例:只运行一个特定特性

```markdown
---
run: only
---

# This feature runs, all other features are skipped

## Scenario

Given this is the first step
```

## 备选案文

变体(在特性的前题所定义)可用于运行相同的 特性在不同变体中。 对于每个变体条目,特性文件是 运行。 ([示例](https://npmcn.com/package/%40bifravst/bdd-markdown/runner/test-data/runSuite/variants/Variants.feature.md)(中文(简体) )

## JSON 的占位数

对于JSON代码块,有一个特殊的标记来替换数字占位符, 保留 JSON 语法并允许像更美的格式 以格式化代码块.

````markdown
Given `v` is the number `42`

And I store this in `result`

```json
{ "foo": "$number{v}" }
```

Then `result` should match

```json
{ "foo": 42 }
```
````

## 标记下报员

它包括一个减记记者, 将套件结果变成减记, 适合显示为 [GitHub 动作任务摘要](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary)。 。 。 .

示例 [火星漫游者报告](https://npmcn.com/package/%40bifravst/bdd-markdown/reporter/test-data/mars-rover.md)

## 节点和国家预防机制

这个项目需要节点.js `>=24.19.0 <25` 页:1 `>=12.0.2 <13` (强制执行) 通过 `check-node-version` 打开 `npm install` 财务报告和审定财务报表 `npm ci`) (中文(简体) ).

检查时跳过 `npm publish` 财务报告和审定财务报表 `npm pack`,因为 `semantic-release` 捆绑自己的npm(`@semantic-release/npm` 取决于 `npm@^11.6.2`)并使用该版本而不是该版本运行出版物 安装于 CI.

## 类型脚本 6和 7

此还原 [并行运行类型脚本 6和 7](https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/#running-side-by-side-with-typescript-6.0), (中文(简体) ), [这样,斯林特工作](https://github.com/typescript-eslint/typescript-eslint/issues/10940#issuecomment-4922812181)。 。 。 .

## 常见问题

### @bifravst/bdd-markdown 是什么？

在Markdown中写入BDD测试\.

### 如何安装 @bifravst/bdd-markdown？

在项目目录运行 npm install @bifravst/bdd-markdown，或使用 pnpm add / yarn add / bun add。

### @bifravst/bdd-markdown 支持 TypeScript 吗？

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

### @bifravst/bdd-markdown 支持 ESM 还是 CommonJS？

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

### @bifravst/bdd-markdown 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=24\.22\.1 \<25 \|\| \>=26\.12\.1 \<27。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @bifravst/bdd-markdown 可以商用吗？

@bifravst/bdd-markdown 使用 BSD-3-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。另外不得用原作者名义为衍生产品背书。以上为概括，不构成法律意见，请以许可原文为准。

### @bifravst/bdd-markdown 的下载量有多少？

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

### @bifravst/bdd-markdown 还在维护吗？

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

