TypeScript中的TDD:无忧无虑地编写代码

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

别再猜测了:为什么TDD不是自虐,而是一种超能力

\n\n

想象一下:你正在编写代码。一切正常。你很高兴。一个月后你回到项目,做了一个小小的改动——然后一切都崩溃了。熟悉吗?现在想象一下,你有一个安全网,可以在一秒钟内捕捉每一个错误。这就是TypeScript中的TDD——测试驱动开发。

\n\n

许多开发人员认为TDD是为完美主义者或NASA项目准备的。剧透:事实并非如此。测试驱动开发是一种工具,可以节省数小时的调试时间,提高代码质量,并使重构变得安全。在本文中,我们将通过实际示例来探讨TypeScript TDD,没有废话和抽象概念。

\n\n

如果你使用TypeScript编写代码,并且希望不再害怕自己的修改——请继续阅读。会很有趣的。

\n\n

什么是TDD(以及为什么它不是关于“编写测试”)

\n\n

TDD(测试驱动开发)是一种在编写代码之前先编写测试的方法论。听起来很疯狂?只是乍一看而已。TDD循环包括三个步骤:

\n\n
    \n
  1. 红色(Red)——编写一个肯定会失败的测试,因为代码还不存在。
  2. \n
  3. 绿色(Green)——编写最少的代码以使测试通过。
  4. \n
  5. 重构(Refactor)——在不改变行为的情况下改进代码。
  6. \n
\n\n

如此循环往复。每个新功能都从测试开始。这能培养纪律性,迫使你提前考虑API设计,并让你确信一切都在按预期运行。

\n\n

顺便说一句,TypeScript单元测试不仅仅是“检查函数”。它是文档、规范和保障的结合体。

\n\n

TypeScript中TDD的工具:需要安装什么

\n\n

对于TypeScript测试,我们需要:

\n\n
    \n
  • Jest——最流行的测试框架。开箱即用,支持TypeScript。
  • \n
  • ts-jest——Jest的预设,使其无需额外配置即可理解TypeScript。
  • \n
  • @types/jest——用于IDE中自动补全的类型。
  • \n
\n\n

一键安装:

\n\n
npm install --save-dev jest ts-jest @types/jest typescript
\n\n

在package.json中添加运行测试的脚本:

\n\n
"scripts": {\n  "test": "jest",\n  "test:watch": "jest --watch"\n}
\n\n

现在一切准备就绪,可以进行TypeScript测试驱动开发了。

\n\n

编写第一个TDD测试:从红色到绿色

\n\n

假设我们需要编写一个函数来检查字符串是否为回文。按照TDD的经典做法,我们从测试开始。

\n\n

步骤1. 红色(Red)

\n\n

创建文件isPalindrome.test.ts:

\n\n
import { isPalindrome } from './isPalindrome';\n\ndescribe('isPalindrome', () => {\n  it('应该为字符串"racecar"返回true', () => {\n    expect(isPalindrome('racecar')).toBe(true);\n  });\n\n  it('应该为字符串"hello"返回false', () => {\n    expect(isPalindrome('hello')).toBe(false);\n  });\n});
\n\n

运行测试:

\n\n
npm test
\n\n

我们看到错误:Cannot find module './isPalindrome'。很好,红色阶段已完成。现在我们需要编写代码以使测试通过。

\n\n

步骤2. 绿色(Green)

\n\n

创建isPalindrome.ts并实现最小功能:

\n\n
export function isPalindrome(str: string): boolean {\n  return str === str.split('').reverse().join('');\n}
\n\n

再次运行测试——绿色!两个测试都通过了。但这还不是全部。

\n\n

步骤3. 重构(Refactor)

\n\n

我们的函数可以工作,但有一个问题:它不处理包含空格和不同大小写的字符串。添加一个新测试:

\n\n
it('应该忽略大小写和空格',                

博客

书籍推荐