如何使用Jest为JavaScript嵌套方法编写单元测试
Jest 测试 Calculator 方法实现方案
前置代码调整
首先需要修改原calculator.js文件,在文件末尾添加导出语句,方便测试文件引入构造函数:
function Calculator() { var self = this; self.add = function (a, b) { return a+b; } self.sub = function(a, b) { return a-b; } self.mul = function(a, b) { return a*b; } self.div = function(a, b) { return a/b; } } // 新增导出语句 module.exports = Calculator;
环境准备
在项目目录下执行命令安装Jest依赖:npm install jest --save-dev
打开项目的package.json文件,修改scripts配置,添加test命令:
{ "scripts": { "test": "jest" } }
编写测试用例
在calculator.js同目录下新建calculator.test.js文件,写入以下测试代码:
// 引入Calculator构造函数 const Calculator = require('./calculator'); let calculator; // 每个测试用例执行前都重新实例化对象,避免用例间状态污染 beforeEach(() => { calculator = new Calculator(); }); // 分组管理四则运算测试用例 describe('Calculator四则运算方法测试', () => { test('add方法 正确计算两数之和', () => { expect(calculator.add(1, 2)).toBe(3); expect(calculator.add(-1, 1)).toBe(0); // 浮点数计算存在精度误差,使用toBeCloseTo做近似断言 expect(calculator.add(0.1, 0.2)).toBeCloseTo(0.3); }); test('sub方法 正确计算两数之差', () => { expect(calculator.sub(5, 3)).toBe(2); expect(calculator.sub(1, 10)).toBe(-9); expect(calculator.sub(0.5, 0.2)).toBeCloseTo(0.3); }); test('mul方法 正确计算两数乘积', () => { expect(calculator.mul(3, 4)).toBe(12); expect(calculator.mul(-2, 5)).toBe(-10); expect(calculator.mul(0.1, 0.2)).toBeCloseTo(0.02); }); test('div方法 正确计算两数之商', () => { expect(calculator.div(10, 2)).toBe(5); expect(calculator.div(-6, 2)).toBe(-3); // 当前实现未处理除数为0的场景,执行后会返回Infinity expect(calculator.div(5, 0)).toBe(Infinity); }); });
注意事项
- 所有四则运算方法都挂载在Calculator实例上,因此用
beforeEach钩子在每个测试用例执行前重新生成实例,避免不同用例之间的状态互相干扰 - 浮点数运算受JS语言特性影响存在精度误差,不要直接用
toBe做严格相等判断,使用Jest内置的toBeCloseTo做近似值断言 - 当前div方法未对除数为0的场景做特殊处理,如果业务需要拦截该场景,可修改方法逻辑抛出错误,再补充对应的异常测试用例
运行测试
在项目目录下执行命令npm test,Jest会自动识别目录下的.test.js后缀文件并执行,最终输出测试通过率、失败用例详情等信息。
内容的提问来源于stack exchange,提问作者Prabhu
相关产品推荐
相关产品推荐

