菜单

测试框架

相关源文件

本文档提供了 n8n 测试架构和方法的技​​术概述。它涵盖了单元测试、端到端测试和数据库测试,并详细介绍了底层的测试框架和 CI/CD 集成。有关创建自定义节点测试的具体信息,请参阅节点开发文档。

概述

n8n 采用多层测试方法来确保代码质量并防止回归问题。测试框架包括:

  1. 单元测试 - 基于 Jest 的测试,用于测试单个组件和函数
  2. 端到端 (E2E) 测试 - 基于 Cypress 的测试,用于测试 UI 工作流和集成
  3. 数据库测试 - 验证跨不同数据库系统功能的测试

来源

在本地运行测试

在为 n8n 做贡献之前,您应该确保所有测试都已通过。以下是如何在本地运行它们:

运行单元测试

如果您修改了快照,您需要更新它们。

要启用代码覆盖率报告,请设置 COVERAGE_ENABLED 环境变量。

运行 E2E 测试

E2E 测试需要先安装 Cypress。

为了调试不稳定的 E2E 测试,n8n 提供了一个特殊的命令:

来源

测试结构

单元测试

单元测试侧重于隔离测试单个组件和函数。Jest 配置已设置,支持 TypeScript、收集覆盖率(启用时)和生成报告。

来源

单元测试应与它们正在测试的代码放在一起,并带有 .test.ts.spec.ts 扩展名。测试文件由 Jest 自动发现和运行。

n8n 代码库使用 Turbo 来管理跨包的测试执行。

来源

端到端测试

E2E 测试框架使用 Cypress,并围绕以下内容构建:

  1. 页面对象 - 代表不同页面和组件的类
  2. 可组合函数 - 用于常见操作的可重用测试函数
  3. 测试文件 - 位于 cypress/e2e/ 中的实际测试规范

来源

数据库测试

n8n 包含专门的测试以确保与不同数据库系统的兼容性。这些测试验证数据库迁移、模式定义和查询是否能在支持的数据库中正确工作。

来源

CI/CD集成

测试会在 GitHub Actions 中自动运行,以响应拉取请求和推送到主分支。测试流程包括:

  1. 构建步骤 - 构建代码库
  2. 单元测试 - 运行包的 Jest 测试
  3. 代码审查 - 确保代码质量和风格一致性
  4. 数据库测试 - 使用不同数据库系统进行测试
  5. E2E 测试 - 运行 Cypress 测试以实现端到端功能

来源

可重用工作流

n8n 使用可重用的 GitHub Actions 工作流来标准化不同触发器下的测试。

来源

编写测试

单元测试

在为 n8n 做贡献时,您必须为您的更改包含单元测试。单元测试应:

  1. 与它们正在测试的代码放在一起
  2. 专注于测试隔离功能
  3. 使用描述性的测试名称
  4. 避免对外部服务的依赖

为了测试工作流,n8n 提供了预定义的节点类型和测试助手。

来源

端到端测试

E2E 测试应:

  1. 使用现有的页面对象或可组合函数
  2. 专注于真实的用户流程
  3. 与其他测试隔离
  4. 使用数据属性(data-test-id)来选择元素

来源

数据库测试

数据库测试验证 n8n 是否能与不同的数据库系统正常工作。这些测试侧重于:

  1. 数据库迁移
  2. 模式兼容性
  3. 查询性能
  4. 连接池

来源

测试最佳实践

  1. 使用测试数据固定值 - 将测试数据存储在固定值中,而不是硬编码
  2. 保持测试隔离 - 每个测试都应独立,并且不依赖于其他测试的状态
  3. 测试边缘情况 - 考虑边界条件和错误场景
  4. 使用描述性的测试名称 - 名称应描述正在测试的内容
  5. 遵循 AAA 模式 - 准备 (Arrange)、执行 (Act)、断言 (Assert)

测试的 PR 要求

n8n 团队对拉取请求中的测试有具体要求:

  1. 所有 PR 都必须包含测试
  2. 仅限小型 PR - 每个 PR 专注于一个功能或修复
  3. 无 ts-ignore - 确保代码符合 TypeScript 规则
  4. 避免重复代码 - 重用现有组件和逻辑

缺少测试的 PR 将在 14 天后自动关闭。

来源

疑难解答常见测试问题

问题解决方案
不稳定的 E2E 测试使用waitForLoad() 和正确的断言
失败的工作流测试检查凭据和环境变量
快照测试失败查看更改并根据需要更新快照
超时错误检查无限循环或缓慢的操作

测试框架组件

测试框架包含几个关键组件:

单元测试组件

  • Jest - 测试运行器和断言库
  • TS-Jest - Jest 的 TypeScript 支持
  • 覆盖率报告 - 代码覆盖率分析

E2E 测试组件

  • Cypress - E2E 测试框架
  • 页面对象 - 代表 UI 页面和组件的类
  • 可组合函数 - 可重用的测试操作
  • 自定义命令 - 扩展的 Cypress 命令
  • 固定值 - 测试数据和工作流

CI 集成组件

  • GitHub Actions - CI/CD 工作流自动化
  • 矩阵测试 - 跨多个环境进行测试
  • 工作流执行 - 自动化工作流测试

这个全面的测试框架确保了 n8n 在代码库演进过程中保持稳定和可靠。