Automatic Jest Test Generation for GitHub PRs with Dual AI Review
Last edited 39 days ago
Workflow: Automatic Unit Test Creator from GitHub
🏗️ Architecture Overview
This workflow listens for GitHub pull-request events, analyzes changed React/TypeScript files, auto-generates Jest tests via AI, has them reviewed by a second AI pass, and posts suggestions back as PR comments:
- GitHub Webhook → PR opened or updated
- Fetch & Diff → Retrieve raw diff of changed files
- Filter & Split → Isolate .tsx files & their diffs
- Fetch File Contents → Provide full context for tests
- Test Maker Agent → Generate Jest tests for diff hunks
- Code Reviewer Agent → Refine tests for style & edge-cases
- Post PR Comment → Sends suggested tests back to GitHub
📦 Node-by-Node Breakdown
flowchart LR
A[Webhook: /github/pr-events] --> B[GitHub: Get PR]
B --> C[Function: Parse diff_url + owner/repo]
C --> D[HTTP Request: GET diff_url]
D --> E[Function: Split on "diff --git"]
E --> F[Filter: /\.tsx$/]
F --> G[GitHub: Get File Contents]
G --> H[Test Maker Agent]
H --> I[Code Reviewer Agent]
I --> J[Function: Build Comment Payload]
J --> K[HTTP Request: POST to PR Comments]
Webhook: GitHub PR Events
- Type: HTTP Webhook (
/webhook/github/pr-events
) - Subscribed Events:
pull_request.opened
,pull_request.synchronize
GitHub: Get PR
- Node: GitHub
- Action: "Get Pull Request"
- Inputs: owner, repo, pull_number
Function: Parse diff_url + owner/repo
- Extracts:
- diff_url (e.g. …/pulls/123.diff)
- owner, repo, merge_commit_sha
HTTP Request: GET diff_url
- Fetches unified-diff text for the PR.
Function: Split on "diff --git"
- Splits the diff into file-specific segments.
Filter: /.tsx$/
- Keeps only segments where the file path ends with .tsx.
GitHub: Get File Contents
- For each .tsx file, fetches the latest blob via GitHub API.
Test Maker Agent
- Prompt:
- "Generate Jest unit tests covering only the behaviors changed in these diff hunks."
- Output: Raw Jest test code.
Code Reviewer Agent
- Reads file + generated tests
- Prompt:
- "Review and improve these tests for readability, edge-cases, and naming conventions."
- Output: Polished test suite.
Function: Build Comment Payload
- Wraps tests in TypeScript fences:
// generated tests…
- Constructs JSON:
{ "body": "<tests>" }
HTTP Request: POST to PR Comments
- URL:
https://api.github.com/repos/{owner}/{repo}/issues/{pull_number}/comments
- Body: Contains the suggested tests.
🔍 Design Rationale & Best Practices
Focused Diff Analysis
- Targets only .tsx files to cover UI logic.
Two-Stage AI
- Separate "generate" + "review" steps mimic TDD + code review.
Stateless Functions
- Pure JS for parsing & transformation, easy to test.
Non-Blocking PR Comments
- Asynchronous suggestions—developers aren't blocked.
Scoped Permissions
- GitHub token limited to reading PRs & posting comments.
You may also like

Automated PR Code Reviews with GitHub, GPT-4, and Google Sheets Best Practices
JiJihene
1.1k
100

Fetch Dynamic Prompts from GitHub and Auto-Populate n8n Expressions in Prompt
ReRealSimple Solutions
1.2k
42

Generate Collaborative Handbooks with GPT-4o Multi-Agent Orchestration & Human Review
FaFabrizio Terzi
1.8k
105
New to n8n?
Need help building new n8n workflows? Process automation for you or your company will save you time and money, and it's completely free!