Jest测试multiply两数相乘函数结果不符预期的问题排查
Jest multiply 单元测试报错原因
你的代码存在以下几个明确问题,直接导致测试无法通过:
- 函数未接收传入参数:测试用例调用
multiply方法时传入了包含两个待计算数字的数组[2,4],但你定义的multiply函数没有声明任何形参,根本无法获取传入的待计算数值。 - 计算逻辑完全不符合需求:函数内写的
[`0`] * [`0`]是JS隐式类型转换的特殊写法,两个仅含字符串'0'的单元素数组做乘法时,会被分别转成数字0做计算,永远返回固定值0,完全没有基于传入参数做乘积运算。 - 方法挂载对象不匹配:测试用例是通过
calculator.multiply()的形式调用方法,你仅单独声明了一个游离的multiply函数,没有将其挂载到calculator对象上,运行时会直接抛出calculator.multiply is not a function的类型错误。 - 额外注意:你贴出的测试代码缺少
describe块的闭合括号,运行时也会报语法错误。
修正后可通过测试的代码
功能实现代码
const calculator = { multiply: function (numList) { // 取传入数组的前两个值做乘积,如需支持多数字相乘可替换为 numList.reduce((a,b) => a*b, 1) return numList[0] * numList[1]; } }; // 若使用CommonJS模块化规范,需添加导出语句:module.exports = calculator;
补全语法的测试代码
describe('multiply', () => { test('multiplies two numbers', () => { expect(calculator.multiply([2,4])).toBe(8); }); });
修正后运行测试,calculator.multiply([2,4])会正确返回8,和断言预期值匹配,测试即可通过。
内容的提问来源于stack exchange,提问作者Dilek
相关产品推荐
相关产品推荐

