# @app-studio/qa-seed 中文文档

规范地址：https://npmcn.com/package/%40app-studio/qa-seed/

版本：0\.11\.6
npm 元数据更新时间：2026-11-05T23:13:23.225Z
中文译文更新时间：2026-11-06T23:55:58.504Z
软件包许可：UNLICENSED

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

原始 npm 页面：https://www.npmjs.com/package/%40app-studio/qa-seed
原文对照：https://npmcn.com/package/%40app-studio/qa-seed/?lang=original

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

- 包体积（解压后）：87.7 kB，42 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：2 个
- 首次发布：2026-08-09T15:45:59.003Z
- 最新版本发布：2026-11-05T23:13:23.035Z
- 近 30 天下载量：2147（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：33（近 12 个月 33 个）

## 中文简介

作为每个地貌单元的种子在跨进程锁下以依赖顺序组成,外加作为端到端准备门的无依赖HTTP验证器.

## 安装

```sh
npm install @app-studio/qa-seed
```

也可以使用：`pnpm add @app-studio/qa-seed`、`yarn add @app-studio/qa-seed`、`bun add @app-studio/qa-seed`

## README

# @app-studio/qa-种子

种子作为每个地貌单元,按照锁下的依赖顺序组成——加 无依赖的 HTTP 验证器,作为端到端的备战门双倍.

## 种子是为了什么

该系统不是基础. **一个特定的世界需要,所以它 任何人都可以永远以同样的形态重放.** 管理员邀请 已经是会员的人"需要一个工作空间,一个管理员,并且 成员;它的种子就是那个,没有别的了.

这就是种子来的原因 _之后_ aPI 的决定, 从未有过: 数据写入 在 API 之前,该数据是针对一个猜测写入的.

## 发现,未申报

```ts
// src/features/identity/seed/index.ts
import type { SeedModule } from '@app-studio/qa-seed';

const seed: SeedModule<AppContext> = {
  key: 'identity',
  async run({ auth }) {
    const admin = await auth.signUp({ email: 'admin@example.com', password: 'password123456' });
    return [{ name: 'identity.adminId', value: admin.id }];
  },
};

export default seed;
```

```ts
const modules = await discoverSeedModules({ rootDir, pattern: 'src/features/*/seed/index.ts' });
await runSeed({ rootDir, modules, context });
```

将文件扔入一个特性使其成为种子; 删除特性删除其特性 种子 。 没有中央名单,因为中央名单是 悄悄地出错:一个特性被去掉,其条目被留下,下一个人 读取列表时,可以相信一个已经不存在的特征.

## 三个不是风格偏好的规则

**拨打真正的服务,从来没有SQL.** 插入成员中的管理员 表格是一个与接受邀请不同的管理员——否 审计分录,不得有分析事件,不得实时发布. 然后每一次测试 依赖这些副作用是测试一个实际无法应用的世界 生产.

**宣布命令;不要假设.** 文件顺序不是依赖图, 和一个种子,碰巧工作 因为它的光彩 如何排序它的输入中断 一天,有人重命名一个特性. `composeSeeds` 地形分类 `dependsOn`,在有周期时命名周期,并且具有决定性,所以两个运行 (b) 一个登记册产生一个顺序.

**过失是破坏的财产.** 种子在数据库上运行两次 有人忘记重置 必须产生同一个世界 而不是第二个副本.

## 锁

`runSeed` 持有跨进程锁定持续时间。 不慎:取出两个种子 与一个数据库相撞,进入一个它们都无法描述的状态 导致的失败看起来像应用程序错误——一行存在两次, a 代码从未写过的数据上唯一的限制射击.

锁是用取出键键的 所以两个工作树种子 同时两个贝壳 在同一账户中没有。 报告一个臭锁 与持有者的细节 以及清除它的确切命令,绝不自动删除——两个服务员可以 既观察已死持有人,又删除文件,第二个删除 驱逐了第一扇锁 刚刚合法取走.

## HTTP 测试

```ts
import { expectNonEmpty, verifySeed, waitForSeed } from '@app-studio/qa-seed';

export const checks = [
  expectNonEmpty(
    'a workspace exists',
    '/api/workspaces',
    'Every journey signs in and lands in a workspace; with none seeded, they all fail on the first screen.',
  ),
];
```

**故意超过HTTP而不是超过SQL.** 在末端运行 API 时常 拥有与数据库的唯一连接——嵌入式引擎,集合 连接,测试过程无法到达的容器——所以SQL验证器会 或无法连接,或更糟糕的是,连接到 _不同_ 数据库和数据库 愉快地报告成功.

每张支票都带有 `proves` 线条,报告会打印它。 "预期1,得到 0"派人来看支票 "没有种子,他们都失败了" 第一屏"送来修种子.

**同样的功能是准备门.** 没有驱动浏览器的 应在通过前开始:针对未种子数据库启动的UI套件 在屏幕中间的某处失败, 并带有空白列表的截图 也没有说数据从未存在过. `qa e2e` 运行于起始之间 aPI 并启动浏览器将与之交谈的任何内容 .

`waitForSeed` 同样的检查 与最后期限, 启动窗口。 失败 报告仍然有问题, 不只是那个时间用完了.

## 出口

| 导出 | 目的 |
| --- | --- |
| `SeedModule`, (中文(简体) ), `composeSeeds` | 单位,以及依附的构成. |
| `discoverSeedModules` | 找寻他们. |
| `runSeed` | 在锁下按顺序运行,收集已出版的文物. |
| `verifySeed`, (中文(简体) ), `waitForSeed`, (中文(简体) ), `formatVerifyReport` | 证明世界的存在. |
| `expectNonEmpty`, (中文(简体) ), `expectJson` | 最普通的支票,写出. |

## 所需资源

节点.js20或更新. 没有超出运行时间的依赖性 `@app-studio/qa-core` (单位:千美元) glob —— 特别是修饰者没有依赖性,所以可以跑到任何地方, 包括一个没有其他装置的容器.

## 常见问题

### @app-studio/qa-seed 是什么？

作为每个地貌单元的种子在跨进程锁下以依赖顺序组成,外加作为端到端准备门的无依赖HTTP验证器\.

### 如何安装 @app-studio/qa-seed？

在项目目录运行 npm install @app-studio/qa-seed，或使用 pnpm add / yarn add / bun add。

### @app-studio/qa-seed 支持 TypeScript 吗？

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

### @app-studio/qa-seed 支持 ESM 还是 CommonJS？

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

### @app-studio/qa-seed 需要什么版本的 Node\.js？

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

### @app-studio/qa-seed 可以商用吗？

@app-studio/qa-seed 使用 UNLICENSED 许可。作者声明为 UNLICENSED，即不授予公开使用许可（与公共领域的 Unlicense 不同）。使用前需获得作者授权。以上为概括，不构成法律意见，请以许可原文为准。

### @app-studio/qa-seed 的下载量有多少？

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

### @app-studio/qa-seed 还在维护吗？

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

