基于 Github 的自动单元测试生成器
高级
这是一个Engineering, AI领域的自动化工作流,包含 24 个节点。主要使用 Code, Merge, Github, Webhook, GithubTool 等节点,结合人工智能技术实现智能自动化。 为 GitHub PR 自动生成 Jest 测试,支持双 AI 审查
前置要求
- •GitHub Personal Access Token
- •HTTP Webhook 端点(n8n 会自动生成)
- •可能需要目标 API 的认证凭证
- •OpenAI API Key
使用的节点 (24)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "7vi7pp915Xoh9Ovu",
"meta": {
"instanceId": "6bcff5ef8a06e8086902526a05c2a4c7bf5da8101f89e582301ed78094606f40",
"templateCredsSetupCompleted": true
},
"name": "基于 Github 的自动单元测试生成器",
"tags": [],
"nodes": [
{
"id": "abb61423-4f32-41ce-a519-754b0b960503",
"name": "GH - 获取 PR",
"type": "n8n-nodes-base.github",
"position": [
-1820,
-420
],
"parameters": {},
"retryOnFail": true,
"typeVersion": 1,
"alwaysOutputData": false
},
{
"id": "4bef0a06-16e7-4016-badb-5dcfb4c60a69",
"name": "获取 .diff 文件",
"type": "n8n-nodes-base.httpRequest",
"position": [
-520,
-100
],
"parameters": {},
"typeVersion": 4.2
},
{
"id": "11edfe11-11a1-4182-bb00-377688d974ed",
"name": "将文本拆分为数组",
"type": "n8n-nodes-base.code",
"position": [
-300,
-100
],
"parameters": {},
"typeVersion": 2
},
{
"id": "24a69dd5-d956-480a-8b90-4bfe0b65846e",
"name": "筛选组件",
"type": "n8n-nodes-base.code",
"position": [
-80,
-100
],
"parameters": {},
"typeVersion": 2
},
{
"id": "865a7c7c-7459-4869-96b7-9b86b401426f",
"name": "提取 API URL、所有者和仓库",
"type": "n8n-nodes-base.code",
"position": [
-940,
40
],
"parameters": {},
"typeVersion": 2
},
{
"id": "3ba6c65f-0089-41b5-8af5-7bcc31345530",
"name": "获取文件名",
"type": "n8n-nodes-base.code",
"position": [
-80,
140
],
"parameters": {},
"typeVersion": 2
},
{
"id": "fc2667a8-ae72-40da-9a9d-be930fba5ebb",
"name": "获取文件",
"type": "n8n-nodes-base.githubTool",
"position": [
-1260,
680
],
"parameters": {},
"typeVersion": 1
},
{
"id": "3a32bccc-e751-4757-9d6e-04c4eab58988",
"name": "结构化输出解析器",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-1020,
680
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "a112221f-9f2d-4199-83f8-e7713b20154b",
"name": "合并所需信息",
"type": "n8n-nodes-base.merge",
"position": [
-300,
140
],
"parameters": {},
"typeVersion": 3.1
},
{
"id": "2a3ad69b-06af-41a7-a3dc-7ace5671553e",
"name": "测试生成器",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1360,
460
],
"parameters": {},
"typeVersion": 1.8
},
{
"id": "87cbff84-a239-446e-a5c8-ed07432ab7a1",
"name": "获取仓库",
"type": "n8n-nodes-base.githubTool",
"position": [
-1140,
680
],
"parameters": {},
"typeVersion": 1
},
{
"id": "3913cdac-ff53-4a46-a445-2fd4b9ab3f9f",
"name": "代码审查器",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-900,
460
],
"parameters": {},
"typeVersion": 1.8
},
{
"id": "d36b6f35-1e25-4366-a23d-139e89eb45f0",
"name": "o3-mini",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1460,
680
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "c4611e9c-c51b-404d-968a-b144e4251f69",
"name": "gpt4.1-mini",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-840,
680
],
"parameters": {},
"typeVersion": 1.2
},
{
"id": "dfaedcea-5bf5-48f6-9776-f64bb96244ff",
"name": "合并",
"type": "n8n-nodes-base.merge",
"position": [
-520,
460
],
"parameters": {},
"typeVersion": 3.1
},
{
"id": "769d0846-4ba7-42bd-9117-8fc1cb9fbb2c",
"name": "准备 POST 请求",
"type": "n8n-nodes-base.code",
"position": [
-300,
460
],
"parameters": {},
"typeVersion": 2
},
{
"id": "3c8c6f4a-4031-47d4-9086-81d435f06238",
"name": "提交评论",
"type": "n8n-nodes-base.httpRequest",
"position": [
-80,
460
],
"parameters": {},
"typeVersion": 4.2
},
{
"id": "bb3e84fb-f1a9-41f6-8e34-f6fb8b2b7ea7",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-1240,
40
],
"webhookId": "91136d34-84ba-4256-a657-31812d04cbde",
"parameters": {},
"typeVersion": 2
},
{
"id": "d02bb743-f9ce-4753-9fb3-a0c99a7e5a19",
"name": "第二个测试节点",
"type": "n8n-nodes-base.code",
"position": [
-1560,
-400
],
"parameters": {},
"typeVersion": 2
},
{
"id": "0a50732e-619d-4def-a63d-d5762934df9b",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1860,
-520
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "64f8767b-eb19-4aa1-ae71-6959c09c0d50",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1380,
-120
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "a3df6a54-8fd1-47fe-9e07-d9fb58baa1fa",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-620,
-180
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "82b5aa37-2b56-436d-bde7-c8788357b6a6",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1880,
380
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "460aeeaf-e104-4b9c-b434-335e4db73250",
"name": "结构化输出解析器1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-700,
680
],
"parameters": {},
"typeVersion": 1.2
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "d0882c15-ed71-40f6-acd7-5848ef4d6d72",
"connections": {
"Merge": {
"main": [
[
{
"node": "Prepare for POST",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Extrat API URL, owner and repo",
"type": "main",
"index": 0
}
]
]
},
"o3-mini": {
"ai_languageModel": [
[
{
"node": "Test Maker",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Get Repo": {
"ai_tool": [
[
{
"node": "Test Maker",
"type": "ai_tool",
"index": 0
},
{
"node": "Code Reviewer",
"type": "ai_tool",
"index": 0
}
]
]
},
"Get Files": {
"ai_tool": [
[
{
"node": "Test Maker",
"type": "ai_tool",
"index": 0
},
{
"node": "Code Reviewer",
"type": "ai_tool",
"index": 0
}
]
]
},
"Test Maker": {
"main": [
[
{
"node": "Code Reviewer",
"type": "main",
"index": 0
}
]
]
},
"GH - Get PR": {
"main": [
[]
]
},
"gpt4.1-mini": {
"ai_languageModel": [
[
{
"node": "Code Reviewer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Code Reviewer": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Get File name": {
"main": [
[
{
"node": "Test Maker",
"type": "main",
"index": 0
}
]
]
},
"POST Comments": {
"main": [
[]
]
},
"GET .diff file": {
"main": [
[
{
"node": "Splits text into array",
"type": "main",
"index": 0
}
]
]
},
"Prepare for POST": {
"main": [
[
{
"node": "POST Comments",
"type": "main",
"index": 0
}
]
]
},
"Merge info needed": {
"main": [
[
{
"node": "Get File name",
"type": "main",
"index": 0
}
]
]
},
"2nd Node for Testing": {
"main": [
[]
]
},
"FIlter for components": {
"main": [
[
{
"node": "Merge info needed",
"type": "main",
"index": 0
}
]
]
},
"Splits text into array": {
"main": [
[
{
"node": "FIlter for components",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Test Maker",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Code Reviewer",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Extrat API URL, owner and repo": {
"main": [
[
{
"node": "GET .diff file",
"type": "main",
"index": 0
},
{
"node": "Merge info needed",
"type": "main",
"index": 1
},
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 工程, 人工智能
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
VDS工作流公开版
使用AI、GitHub和Vercel从文本提示构建和部署MVP
If
Code
Wait
+15
54 节点Varritech
开发运维
使用AI格式化将Markdown内容转换为Contentful富文本
使用AI格式化将Markdown内容转换为Contentful富文本
Code
Merge
Http Request
+4
12 节点Varritech
工程
预约预订器 [销售版本]
集成GPT-4、ElevenLabs和Twilio的多渠道AI预约确认系统
Code
Gmail
Merge
+10
20 节点Varritech
客户培育
使用OpenAI和RAGAS方法评估AI代理响应正确性
使用OpenAI和RAGAS方法评估AI代理响应正确性
Set
Code
Merge
+12
27 节点Jimleuk
工程
使用GPT和Perplexity AI为Contentful CMS生成知识库文章
使用GPT和Perplexity AI为Contentful CMS生成知识库文章
If
Set
Code
+10
23 节点Cristiano Varriale
客户支持
转录评估器
使用DeepGram和GPT-4o的音频对话分析与可视化
Set
Code
Html
+15
54 节点RealSimple Solutions
人工智能