🚀 构建 AI 驱动的 Jest 测试用例生成器(适用于 TypeScript)

发布: (2026年1月5日 GMT+8 18:02)
7 min read
原文: Dev.to

I’m happy to translate the article for you, but I need the full text of the post (the content that follows the source line). Could you please provide the article’s body so I can translate it while preserving the formatting and code blocks?

编写单元测试是最佳实践,但对许多开发者来说,这是一项重复、耗时的工作,且随着项目规模扩大,容易被搁置。

在 TypeScript 后端项目中,保持 Jest 测试覆盖率高往往意味着要花大量时间编写样板代码,而不是专注于实际业务逻辑。

解决方案

我构建了 ts-genai-test,一个基于 AI 的 Jest 测试用例生成器,适用于 TypeScript(Node.js),它可以使用可配置的生成式 AI 提供商自动创建有意义的单元测试。

  • GitHub:
  • npm:

🧠 The Problem

大多数开发者在编写单元测试时都会遇到相同的挑战:

  • 编写重复的 Jest 样板代码
  • 由于时间紧迫而遗漏边缘情况
  • 重构后测试变得过时
  • 花在测试上的时间比写代码的时间还多

传统的测试生成器可以搭建文件结构,但它们并不了解函数的意图。生成式 AI 能够推理函数签名和预期行为,使其非常适合用于单元测试生成。让我们对此保持好奇!

🤖 什么是 ts-genai-test

ts-genai-test 是一个开发者工具,具备以下功能:

  • 自动生成 Jest 单元测试用例
  • 适用于 TypeScript(Node.js)项目
  • 支持多种 AI 提供商
  • 可配置模型名称和 API 密钥
  • 生成可直接运行的 .test.ts 文件
  • 旨在无缝集成到 CI/CD 工作流中

项目使用 TypeScript 编写,使用 pnpm 打包,注重简洁、可扩展和开发者友好。

✨ 关键特性

✅ AI 生成的 Jest 测试用例

将工具指向一个 TypeScript 文件或函数,它会自动生成 Jest 测试用例。

import path from "path";
import { generateTests, functionalTypes } from "ts-genai-test";

const inputPrompt: functionalTypes.PromptInput[] = [
  {
    outputTestDir: path.resolve(__dirname, "../__tests__"), // optional, defaults to 'tests' folder
    folderPath: path.resolve(__dirname, "../src"),          // source folder
    filePath: path.resolve(__dirname, "../src/index"),    // source file
    functionName: "add",                                   // function to generate tests for
    testFileName: "",                                      // optional custom test file name
    rootPath: ""                                           // required if outputTestDir not provided
  }
];

await generateTests(inputPrompt);

生成的输出干净、可读,并且可以直接执行——无需手动清理。

🧩 覆盖已有测试用例(基于标志的控制)

默认情况下,ts-genai-test 会保留已有的测试文件,以避免意外覆盖。当启用 override 标志时:

  • 现有的 .test.ts 文件会被显式覆盖
  • 之前生成的或手动编写的测试可以被新生成的测试替代
  • 开发者完全掌控何时允许重新生成

这种有意且明确的做法降低了意外更改的风险,同时仍然支持重新生成的工作流。

⚙️ 广泛且灵活的 AI 配置

配置模型细节(建议通过环境变量):

变量描述
AI_PROVIDERAI 提供商(例如 openaigeminigroq
AI_MODEL_NAME模型代码或名称(例如 gemini-2.5-flash
AI_API_KEY提供商 API 密钥
AI_RETRY_COUNTAI 调用失败的重试次数

这种灵活性使团队能够切换提供商、控制成本,并为工作流的未来发展做好准备。

🔄 内置重试机制

AI 调用可能因网络问题或响应不完整而失败。ts-genai-test 包含一次性重试机制,在失败前尝试重新生成——这使得在 CI 流水线等自动化环境中更安全。

🗂 自动测试目录处理

如果目标测试目录不存在,工具会自动创建,降低了设置的阻力。

🧪 示例

给定一个简单的工具函数:

export function add(a: number, b: number): number {
  return a + b;
}

工具会生成类似以下的 Jest 测试:

test("adds two numbers", () => {
  expect(add(2, 3)).toBe(5);
});

简洁、可读,并且可以立即执行。

⚠️ 限制

  • 需要审查: 生成的测试应在投入生产前进行审查。AI 输出可帮助开发者,但不能替代人工判断。
  • 复杂逻辑: 具有复杂业务逻辑的函数可能需要手动调整以确保正确性和覆盖率。
  • 范围: 目前仅支持功能(单元级)测试用例。REST API 测试、基于 Swagger/OpenAPI 的生成以及端到端场景尚未提供。

这些限制定义了当前的范围,并凸显了未来改进的机会。

🤝 开源与协作

ts-genai-test 完全开源。欢迎贡献、提交问题和功能请求!

祝测试愉快!

欢迎贡献

我们正在寻找在以下几个方面的帮助:

  • 支持更多 AI 提供商
  • 改进提示质量
  • 添加对其他测试框架的支持
  • 探索基于 REST 或 Swagger 的测试生成
  • 处理不受支持的语言和错误代码
  • 支持非 TypeScript 文件

文档与示例

🔗 GitHub: testcase-gen-ai-ts
📦 npm: ts-genai-test

🧰 技术栈

  • TypeScript
  • Node.js
  • pnpm (v10.24.0)
  • Jest
  • 生成式 AI (基于 LLM 的测试生成)

📦 安装

使用 pnpm(推荐):

pnpm install ts-genai-test

或使用 npm:

npm install ts-genai-test

📌 最后思考

本项目探讨了生成式 AI 如何帮助开发者以更少的工作量编写更好的单元测试。虽然它并不能取代深思熟虑的测试设计,但它显著减少了样板代码并加快了开发速度。

如果你正在使用 TypeScript 后端并且花费太多时间编写 Jest 测试,这个工具可能会有所帮助。欢迎随时贡献!

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex:我为何构建

介绍 大家好。今天我想分享一下我是谁、我在构建什么以及为什么。 早期职业生涯与倦怠 我在 17 年前开始我的 developer 生涯……