JavaScript 测试入门
作为软件工程师,我们的工作是编写能够解决问题的代码,并确保其能够正确解决问题。测试可以帮助我们确保编写的软件能够按照预期运行。单元测试是最基本的测试类型,它可以对一段代码执行,验证其对于给定值集的正确性。
单元测试的一般结构
单元测试通常包含 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