今日核心: 在写第一行代码前,先定义何为"正确"。测试驱动开发(TDD)是我们对抗AI"幻觉"最强大的武器,它将主观需求转化为客观、可执行的验证标准。
1. 痛点解析:为什么AI需要TDD?
模糊的代价:当您要求AI"实现用户登录"时,它可能生成基于会话的方案,而您期望的是JWT。这种歧义会导致后期大量返工。
TDD作为精准的"产品规格书":测试用例是对功能行为最无歧义的描述。先写测试,等于为AI提供了必须遵守的"契约"。
2. 实战:编写第一个认证测试用例
以下示例定义了用户注册的成功与失败场景,明确约束了后续AI实现必须满足的边界。
// tests/auth.test.js
import { describe, it, expect } from 'vitest';
describe('用户认证模块', () => {
describe('注册流程', () => {
it('应使用邮箱和密码成功注册新用户', async () => {
const userData = {
email: 'test@example.com',
password: 'securePassword123!'
};
// 期待AI实现的API返回成功状态和用户基本信息,且不含密码
const response = await registerUser(userData);
expect(response.status).toBe(201);
expect(response.user).toHaveProperty('id');
expect(response.user.email).toBe(userData.email);
expect(response.user).not.toHaveProperty('password'); // 安全要求
});
it('应拒绝重复邮箱的注册请求', async () => {
const userData = { email: 'duplicate@example.com', password: 'password' };
// 首次注册应成功
await registerUser(userData);
// 第二次注册应失败
const secondResponse = await registerUser(userData);
expect(secondResponse.status).toBe(400);
expect(secondResponse.error).toContain('已存在');
});
});
});
3. AI协作提示词示例
"根据以上Jest/Vitest测试用例,使用BetterAuth库实现一个 registerUser 函数。该函数应接收用户对象,调用BetterAuth的API,并返回符合测试期望的结果。请特别注意错误处理,确保重复邮箱时返回的状态码和错误信息与测试用例完全匹配。"
今日成果: 建立核心功能的测试套件,为AI编程设定不可违背的"法律条文"。