Airtable扩展系统自动测试的写作入门
支持自动化测试目前处于开放β状态.
执行情况
目前并非所有操作都得到支持. 在写作测试过程中,作者可能会发现: 测试中的扩展功能在被诱导进行这些操作时并不符合预期. 作者可请求 SDK 维护者提供支持,或执行所需的功能 他们的部分工作(本文件包括关于在以后的一次试验中延长API的指导意见) 页:1.
下表说明每项行动的执行情况.
| 操作 | 内部支助 | 测试 API |
|---|---|---|
| 表格 - 创建 | 部分 [1] | |
| 表 - 最新数据 | 部分 [1] | |
| 表格 - 销毁 | : 重度 检查 标记 : | |
| 字段 - 创建 | 部分 [1] | |
| 字段 - 更新 | 部分 [1] | |
| 战地 - 销毁 | : 重度 检查 标记 : | |
| 视图 - 创建 | ||
| 视图 - 更新 | ||
| 视图 - 销毁 | : 重度 检查 标记 : | |
| 全球配置 - 更新 | : 重度 检查 标记 : | 无[2] |
| 光标数据 - 更新 | : 重度 检查 标记 : | |
| 会话数据 - 更新 | ||
| 用户权限 - 更新 | : 重度 检查 标记 : | : 重度 检查 标记 : |
| 单击设置按钮 | ||
| 切换全屏幕 | ||
| 扩展记录 | : 重度 检查 标记 : | |
| 记录 - 创建 | 部分 [3] | 无[2] |
| 记录 - 更新 | : 重度 检查 标记 : | 无[2] |
| 记录 - 销毁 | : 重度 检查 标记 : | 无[2] |
- [1] 虽然SDK的公共API支持这些操作,但其能力却受到限制. 理想的情况是,它们将得到更强大的API测试的补充.
- [2] 这些操作可以使用SDK的公用API启动.
- [3] 不支持的操作:为尚未装入的表格创建记录, 创建带有尚未装入字段的数据的记录, (中文(简体) ), 并在特定视图中创建记录
关键概念
测试固定数据 表示一个空军基地的状况,包括说明 表、视图、字段和记录。 由测试作者撰写,内容如下: JSON-可序列价值. 扩展测试 固定空气表扩展 允许开发者从一个正宗基础状态生成此数据. 此扩展名不是 准备好beta了.
TestDriver 是 JavaScript 用于创建和操纵模拟气表的接口
扩展环境. 它执行操作方法,而这些操作在下列情况下是不存在的:
sDK号.
AirtableInterface 是介于模型和后端之间的 SDK 层.
在生产环境中,它通过一个同步消息与扩展的母程序运行
网页浏览器框架. 在测试环境中,没有传播,但 AirtableInterface
表现得好像它正在接收相关的信息,以便模拟生产行为.
变异 说明基地变化的指令。 变相穿越
AirtableInterface,它只将它们送到生产环境中的后端.
写作测试
自2021年1月起,"气表扩展"必须使用"反应框架"来写作. 这些 指令将反应的存在视为理所当然.
每个测试文件必须导入 TestDriver 通过 @airtable/blocks-testing 模块
环境被正确用于自动化.
每项试验一般进行下列步骤:
-
创建 TestDriver 实例, 提供有效的固定数据 :
const testDriver = new TestDriver({ /* fixture data here */ }); -
以儿童身份创建扩展组件 会 议 日 程 和 议 程
TestDriver#Container构成部分.render( <testDriver.Container> <MyExtension /> </testDriver.Container>, ); -
为扩展提供一些投入。 这可能是模拟用户互动的形式 (例如通过) 页:1
@testing-library/user-event图书馆(中文(简体) )// 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 或
TestDriver(原始内容存档于2018-10-12). API.// 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}, ]); -
验证扩展响应了预期输入 。 对于很多类型的互动, 扩展的响应将通过UI的某种变化来发现. 这个
@testing-library/react图书馆 实值 一个检查用户界面状态的好选择.// Ensure that the UI updated to display the checkbox as "checked" const checkbox = screen.getByRole('checkbox'); expect(checkbox.checked).toBe(true);...同时
TestDriverAPI 可用于验证不影响扩展行为 乌伊:// 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']);
待办事宜列表实例扩展的自动测试套件 显示这个模式.
扩展测试 API
为了提供可预测的行为,Airtable测试平台依赖于模拟 基地业务。 每一次模拟都需要在测试平台上提供一定的支持. 有点 模拟还需要专门的测试API.
实施内部支助 每个 基础操作需要一定的模拟代码 在测试环境中支持脚本.
对于一些操作来说,这种模拟可能与内部的“不操作”执行一样有限 方法。 这些操作包括SDK乐观应用的突变和没有 直接影响扩展.
其他行动需要更先进的模拟逻辑。 此类业务一般依赖 在后端的反应 来确定它们对基地的影响。 模拟行为应该是 可预见,模仿生产中的预期反应.
实施专门的API 任何操作不需要专门的测试 API 可以通过SDK的公用API来表达(例如"创建许多记录"或"删除一个表格"). 当测试作者希望脚本这样的操作时,他们应该直接使用SDK. 这是 无效,因为扩展无法区分后端启动的操作和 由使用 SDK 的测试脚本启动的操作.
许多其他操作不能通过SDK的公开API表达. 这个 TestDriver API 必须
以允许测试作者模拟这些操作.
由于截至2021年1月,SDK是 不完整,正在积极发展之中。 这包括删除字段的 API 。 其他限制 对扩展平台的设计至关重要。 例如SDK故意省略 用于修改当前用户权限的扩展方法。 这种区分可能有利于 * 决定采用检测API,因为这样做将增加维护责任 也可以通过未来扩展SDK的公开API来避免.