本文档提供了 n8n 测试架构和方法的技术概述。它涵盖了单元测试、端到端测试和数据库测试,并详细介绍了底层的测试框架和 CI/CD 集成。有关创建自定义节点测试的具体信息,请参阅节点开发文档。
n8n 采用多层测试方法来确保代码质量并防止回归问题。测试框架包括:
来源
在为 n8n 做贡献之前,您应该确保所有测试都已通过。以下是如何在本地运行它们:
如果您修改了快照,您需要更新它们。
要启用代码覆盖率报告,请设置 COVERAGE_ENABLED 环境变量。
E2E 测试需要先安装 Cypress。
为了调试不稳定的 E2E 测试,n8n 提供了一个特殊的命令:
来源
单元测试侧重于隔离测试单个组件和函数。Jest 配置已设置,支持 TypeScript、收集覆盖率(启用时)和生成报告。
来源
单元测试应与它们正在测试的代码放在一起,并带有 .test.ts 或 .spec.ts 扩展名。测试文件由 Jest 自动发现和运行。
n8n 代码库使用 Turbo 来管理跨包的测试执行。
来源
E2E 测试框架使用 Cypress,并围绕以下内容构建:
cypress/e2e/ 中的实际测试规范来源
n8n 包含专门的测试以确保与不同数据库系统的兼容性。这些测试验证数据库迁移、模式定义和查询是否能在支持的数据库中正确工作。
来源
测试会在 GitHub Actions 中自动运行,以响应拉取请求和推送到主分支。测试流程包括:
来源
n8n 使用可重用的 GitHub Actions 工作流来标准化不同触发器下的测试。
来源
在为 n8n 做贡献时,您必须为您的更改包含单元测试。单元测试应:
为了测试工作流,n8n 提供了预定义的节点类型和测试助手。
来源
E2E 测试应:
data-test-id)来选择元素来源
数据库测试验证 n8n 是否能与不同的数据库系统正常工作。这些测试侧重于:
来源
n8n 团队对拉取请求中的测试有具体要求:
缺少测试的 PR 将在 14 天后自动关闭。
来源
| 问题 | 解决方案 |
|---|---|
| 不稳定的 E2E 测试 | 使用waitForLoad() 和正确的断言 |
| 失败的工作流测试 | 检查凭据和环境变量 |
| 快照测试失败 | 查看更改并根据需要更新快照 |
| 超时错误 | 检查无限循环或缓慢的操作 |
测试框架包含几个关键组件:
这个全面的测试框架确保了 n8n 在代码库演进过程中保持稳定和可靠。