如何在测试用例中获取sum函数内部变量res的值?
如何获取函数内部变量res的值?
函数内部用var声明的res是局部变量,外部默认无法直接访问,你可以通过以下几种方式获取它的值:
1. 修改原函数返回结果(最直接)
如果允许修改sum函数,可以让它返回包含计算结果的对象,同时保留原来的true状态:
function sum(a,b){ var res = a+b; return { result: res, status: true }; } test('sum of numbers', () => { const { result } = sum(1,2); expect(result).toBe(3); });
如果不需要保留true的返回值,也可以直接返回res:
function sum(a,b){ var res = a+b; return res; } test('sum of numbers', () => { expect(sum(1,2)).toBe(3); });
2. 重写函数(不修改原函数源码)
如果不能改动原函数的代码,可以在测试时重写sum函数,模拟内部计算逻辑并返回结果:
// 假设使用Jest测试框架 const originalSum = sum; // 重写sum函数 sum = jest.fn((a, b) => { const res = a + b; return res; }); test('sum of numbers', () => { expect(sum(1,2)).toBe(3); // 测试完成后恢复原函数(可选) sum = originalSum; });
3. 动态修改函数代码(非常规方法)
把原函数转为字符串,修改返回语句后用eval执行,得到能返回res的新函数:
function sum(a,b){ var res = a+b; return true; } // 提取函数代码并修改返回值 const sumCode = sum.toString().replace('return true;', 'return res;'); const modifiedSum = eval(`(${sumCode})`); test('sum of numbers', () => { expect(modifiedSum(1,2)).toBe(3); });
注意:局部变量的封装是JavaScript的作用域特性,上述方法都是通过改变函数的行为来间接获取值,没有办法直接在外部访问未暴露的局部变量。
内容的提问来源于stack exchange,提问作者spykeburn
相关产品推荐
相关产品推荐

