JavaScript 测试入门

2025-06-07

JavaScript 测试入门

作为软件工程师,我们的工作是编写能够解决问题的代码,并确保其能够正确解决问题。测试可以帮助我们确保编写的软件能够按照预期运行。单元测试是最基本的测试类型,它可以对一段代码执行,验证其对于给定值集的正确性。

单元测试的一般结构

单元测试通常包含 3 部分:

  1. 需要测试的单元(代码块或函数)
  2. 需要测试的单元的输入
  3. 给定输入的预期输出

单元测试的结构

让我们建立一个迷你测试库

让我们编写一个小函数,将华氏温度转换为摄氏温度。在开始编写函数之前,我们可以先想几个可能的测试用例。

  • 输入 0 应返回 -17.77777777777778 的输出
  • 输入 5 应返回 -15 的输出
  • 输入 -4 应返回 -20 的输出

在实际实现功能之前构建和编写测试的过程称为测试驱动开发 (TDD)。

function ftoc(f) {
  return f - 32 * 5/9;
}

查看单元测试的结构,让我们编写一些实用函数来帮助我们抽象测试的工作。

function expect(result) {
  return {
    toBe: function(expected) {
      if (result !== expected) {
        throw new Error(`Expected ${expected}, but got ${result}`)
      }
    }
  }
}

function it(description, fn) {
  try {
    fn();
    console.log(`✅ ${description}`)
  } catch (error) {
    console.log(`❌ ${description}: ${error}`)
  }
}

it("Convert 0F to Celcius", function() {
  expect(ftoc(0)).toBe(-17.77777777777778)
})
it("Convert Positive Temparaterue to Celcius", function() {
  expect(ftoc(5)).toBe(-15)
})
it("Convert Negative Temparature to Celcius", function() {
  expect(ftoc(-4)).toBe(-20)
})

执行上述代码时,会产生以下输出。

测试失败输出

这表明我们的转换函数只对其中一种情况有效,对另外两种情况无效。要修复此问题,请更新函数,使其包含一对括号。

function ftoc(f) {
  return (f - 32) * 5/9;
}

重新运行测试得到以下输出。

测试通过输出

结论

嗯,很简单,对吧?我们只用几行代码就构建了一个简单的测试库,可以用来测试我们编写的任何代码。虽然它还远不能用于生产环境,但其主要思想和结构保持不变。市面上有很多流行且功能丰富的测试框架,例如 Jest、Mocha 等,它们提供了一些高级功能,例如对失败测试的详细描述、精确的行号和堆栈跟踪,这些功能更适合在生产环境中使用。

我很乐意在评论区听到你的观点和反馈。你也可以在Twitter上联系我。

文章来源:https://dev.to/_akshaym/getting-started-with-testing-javascript-3h7d
PREV
React 自定义 hooks:简单解释
NEXT
500,000 美元漏洞赏金活动 AWS GenAI LIVE!