基于Karma的单元测试:TDD入门阶段的简单函数测试咨询
如何规范测试TDD中的基础判断函数?
嘿,刚入门TDD踩点小坑太正常了,我来帮你把这个测试掰回规范轨道~
首先先明确你的需求:要测试这个判断函数——接收参数为'l'时返回true,否则返回false。原函数代码如下:
function leave(response){ if(response === 'l'){ return true }else{ return false } }
你提到自己写的测试用了变量而非函数,虽然通过但不规范。问题核心在于:你没有调用实际的leave()函数验证它的行为,而是直接赋值变量,这样的测试根本起不到验证函数逻辑的作用——哪怕你把函数里的判断逻辑写错,这个测试依然会通过,完全失去了TDD的意义。
符合规范的测试示例(以Jasmine为例)
下面是针对这个函数的完整规范测试,覆盖了正反两种场景:
// 分组描述测试场景 describe('leave() function', function() { // 测试输入为'l'的情况 it('should return true when response is "l"', function() { // 调用实际的leave函数,传入参数'l',断言返回值为true expect(leave('l')).toBe(true); }); // 测试输入不为'l'的情况(覆盖else分支) it('should return false when response is not "l"', function() { // 可以测试多种非预期输入,比如其他字符、空值、数字等 expect(leave('m')).toBe(false); expect(leave('')).toBe(false); expect(leave(123)).toBe(false); }); });
为什么这样写才规范?
- 每个测试用例都实际调用了被测试的
leave()函数,验证的是函数真实的执行结果,而不是你手动模拟的变量值 - 覆盖了函数的所有分支逻辑:既验证了
if分支的正确返回,也验证了else分支的行为 - 测试描述清晰明确,任何人看了都能知道每个用例在验证什么
额外的TDD小建议
- 测试要尽可能覆盖边界情况:比如输入
undefined、null、大小写的'L'等,确保函数的鲁棒性 - 保持测试用例的独立性:每个
it块只验证一个具体的行为,不要把多个断言混在一个用例里(除非是同一行为的不同输入)
内容的提问来源于stack exchange,提问作者maxd
相关产品推荐
相关产品推荐

