# @airtable/blocks-testing 中文文档

规范地址：https://npmcn.com/package/%40airtable/blocks-testing/

版本：0\.0\.6
npm 元数据更新时间：2026-10-29T17:33:34.734Z
中文译文更新时间：2026-11-05T20:17:31.834Z
软件包许可：UNLICENSED

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

原始 npm 页面：https://www.npmjs.com/package/%40airtable/blocks-testing
原文对照：https://npmcn.com/package/%40airtable/blocks-testing/?lang=original
项目主页：https://airtable.com/developers/blocks
源码仓库：https://github.com/Airtable/blocks

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

- 包体积（解压后）：141 kB，42 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：10 个
- peer 依赖：react ^16\.8\.0 \|\| ^17\.0\.0，react-dom ^16\.8\.0 \|\| ^17\.0\.0，@airtable/blocks ^1\.5\.1
- 首次发布：2021-03-02T12:23:53.581Z
- 最新版本发布：2023-11-30T15:11:24.522Z
- 近 30 天下载量：29967（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

气表块测试库

## 安装

```sh
npm install @airtable/blocks-testing
```

也可以使用：`pnpm add @airtable/blocks-testing`、`yarn add @airtable/blocks-testing`、`bun add @airtable/blocks-testing`

## README

# Airtable扩展系统自动测试的写作入门

支持自动化测试目前处于开放β状态.

## 执行情况

目前并非所有操作都得到支持. 在写作测试过程中,作者可能会发现: 测试中的扩展功能在被诱导进行这些操作时并不符合预期. 作者可请求 SDK 维护者提供支持,或执行所需的功能 他们的部分工作(本文件包括关于在以后的一次试验中延长API的指导意见) 页:1.

下表说明每项行动的执行情况.

| 操作 | 内部支助 | 测试 API |
| --- | --- | --- |
| 表格 - 创建 | 部分 \[1\] |  |
| 表 - 最新数据 | 部分 \[1\] |  |
| 表格 - 销毁 |  | : 重度 检查 标记 : |
| 字段 - 创建 | 部分 \[1\] |  |
| 字段 - 更新 | 部分 \[1\] |  |
| 战地 - 销毁 |  | : 重度 检查 标记 : |
| 视图 - 创建 |  |  |
| 视图 - 更新 |  |  |
| 视图 - 销毁 |  | : 重度 检查 标记 : |
| 全球配置 - 更新 | : 重度 检查 标记 : | 无\[2\] |
| 光标数据 - 更新 |  | : 重度 检查 标记 : |
| 会话数据 - 更新 |  |  |
| 用户权限 - 更新 | : 重度 检查 标记 : | : 重度 检查 标记 : |
| 单击设置按钮 |  |  |
| 切换全屏幕 |  |  |
| 扩展记录 |  | : 重度 检查 标记 : |
| 记录 - 创建 | 部分 \[3\] | 无\[2\] |
| 记录 - 更新 | : 重度 检查 标记 : | 无\[2\] |
| 记录 - 销毁 | : 重度 检查 标记 : | 无\[2\] |

-   \[1\] 虽然SDK的公共API支持这些操作,但其能力却受到限制. 理想的情况是,它们将得到更强大的API测试的补充.
-   \[2\] 这些操作可以使用SDK的公用API启动.
-   \[3\] 不支持的操作:为尚未装入的表格创建记录, [创建带有尚未装入字段的数据的记录](https://github.com/Hyperbase/blocks-sdk/blob/a77fa4b959f512a041e987ee0bfe3fafb7db8b59/packages/sdk/src/models/mutations.ts#L583), (中文(简体) ), 并在特定视图中创建记录

## 关键概念

**测试固定数据** 表示一个空军基地的状况,包括说明 表、视图、字段和记录。 由测试作者撰写,内容如下: JSON-可序列价值. [扩展测试 固定空气表扩展](https://airtable.com/marketplace/blk5qI32GYyYb1Rbm/test-fixture-generator) 允许开发者从一个正宗基础状态生成此数据. 此扩展名不是 准备好beta了.

**`TestDriver`** 是 JavaScript 用于创建和操纵模拟气表的接口 扩展环境. 它执行操作方法,而这些操作在下列情况下是不存在的: sDK号.

**`AirtableInterface`** 是介于模型和后端之间的 SDK 层. 在生产环境中,它通过一个同步消息与扩展的母程序运行 网页浏览器框架. 在测试环境中,没有传播,但 `AirtableInterface` 表现得好像它正在接收相关的信息,以便模拟生产行为.

**变异** 说明基地变化的指令。 变相穿越 `AirtableInterface`,它只将它们送到生产环境中的后端.

## 写作测试

自2021年1月起,"气表扩展"必须使用"反应框架"来写作. 这些 指令将反应的存在视为理所当然.

每个测试文件必须导入 TestDriver 通过 `@airtable/blocks-testing` 模块 环境被正确用于自动化.

每项试验一般进行下列步骤:

1.  创建 TestDriver 实例, 提供有效的固定数据 :
    
    ```js
    const testDriver = new TestDriver({
        /* fixture data here */
    });
    ```
    
2.  以儿童身份创建扩展组件 会 议 日 程 和 议 程 `TestDriver#Container` 构成部分.
    
    ```js
    render(
        <testDriver.Container>
            <MyExtension />
        </testDriver.Container>,
    );
    ```
    
3.  为扩展提供一些投入。 这可能是模拟用户互动的形式 (例如通过) [页:1 `@testing-library/user-event` 图书馆](https://www.npmjs.com/package/@testing-library/user-event)(中文(简体) )
    
    ```js
    // Simulate a user choosing the "Gruyere" option from the table labed
    // "Cheeses".
    const input = screen.getByLabelText('Cheeses');
    const option = screen.getByText('Gruyere');
    userEvent.selectOptions(input, [option]);
    ```
    
    ...或模拟后端行为(例如通过) [块 SDK](https://airtable.com/developers/apps) 或 `TestDriver` (原始内容存档于2018-10-12). API.
    
    ```js
    // Invoking `createTableAsync` in a test script simulates the condition
    // where the Airtable backend reports that a table has been created by
    // another viewer of the Base.
    await testDriver.base.createTableAsync('a new table', [
        {name: 'address', type: FieldType.EMAIL},
    ]);
    ```
    
4.  验证扩展响应了预期输入 。 对于很多类型的互动, 扩展的响应将通过UI的某种变化来发现. [这个 `@testing-library/react` 图书馆](https://www.npmjs.com/package/@testing-library/react) 实值 一个检查用户界面状态的好选择.
    
    ```js
    // Ensure that the UI updated to display the checkbox as "checked"
    const checkbox = screen.getByRole('checkbox');
    expect(checkbox.checked).toBe(true);
    ```
    
    ...同时 `TestDriver` API 可用于验证不影响扩展行为 乌伊:
    
    ```js
    // Track every time the Extension attempts to expand a record.
    const recordIds = [];
    testDriver.watch('expandRecord', ({recordId}) => recordIds.push(recordId));
    
    // (The code necessary to simulate user inteaction elided from this example.)
    
    // Ensure that the Extension attempted to expand the Record with ID `reca`
    expect(recordIds).toEqual(['reca']);
    ```
    

[待办事宜列表实例扩展的自动测试套件](https://github.com/Airtable/apps-todo-list/tree/master/test) 显示这个模式.

## 扩展测试 API

为了提供可预测的行为,Airtable测试平台依赖于模拟 基地业务。 每一次模拟都需要在测试平台上提供一定的支持. 有点 模拟还需要专门的测试API.

**实施内部支助** 每个 基础操作需要一定的模拟代码 在测试环境中支持脚本.

对于一些操作来说,这种模拟可能与内部的“不操作”执行一样有限 方法。 这些操作包括SDK乐观应用的突变和没有 直接影响扩展.

其他行动需要更先进的模拟逻辑。 此类业务一般依赖 在后端的反应 来确定它们对基地的影响。 模拟行为应该是 可预见,模仿生产中的预期反应.

**实施专门的API** 任何操作不需要专门的测试 API 可以通过SDK的公用API来表达(例如"创建许多记录"或"删除一个表格"). 当测试作者希望脚本这样的操作时,他们应该直接使用SDK. 这是 无效,因为扩展无法区分后端启动的操作和 由使用 SDK 的测试脚本启动的操作.

许多其他操作不能通过SDK的公开API表达. 这个 `TestDriver` API 必须 以允许测试作者模拟这些操作.

由于截至2021年1月,SDK是 不完整,正在积极发展之中。 这包括删除字段的 API 。 其他限制 对扩展平台的设计至关重要。 例如SDK故意省略 用于修改当前用户权限的扩展方法。 这种区分可能有利于 \* 决定采用检测API,因为这样做将增加维护责任 也可以通过未来扩展SDK的公开API来避免.

## 常见问题

### @airtable/blocks-testing 是什么？

气表块测试库

### 如何安装 @airtable/blocks-testing？

在项目目录运行 npm install @airtable/blocks-testing，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：react（^16\.8\.0 \|\| ^17\.0\.0）、react-dom（^16\.8\.0 \|\| ^17\.0\.0）、@airtable/blocks（^1\.5\.1）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @airtable/blocks-testing 支持 TypeScript 吗？

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

### @airtable/blocks-testing 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @airtable/blocks-testing 可以商用吗？

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

### @airtable/blocks-testing 的下载量有多少？

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

### @airtable/blocks-testing 还在维护吗？

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

