Jest.js 模拟函数中的内部变量[已关闭]

nfg76nw0  于 2023-02-06  发布在  Jest
关注(0)|答案(4)|浏览(213)

22小时前关门了。
Improve this question
我想检查一个函数的结果,它包含两个数之和,但没有return语句:

function sum(a,b){
var res = a+b;
return true;
}

test('sum of numbers', () => {
expect(sum(1,2)).toBe(res)
});

如何在我的测试中获得res变量的值?

1rhkuytd

1rhkuytd1#

我有一些建议给你。要获得res值,你可以尝试使用一个像JavaScript对象这样的引用类型。

function sum(a,b, obj){
  var res = a+b;
  obj.res = res;
  return true;
}

test('sum of numbers', () => {
  let obj = {};
  expect(sum(1, 2, obj)).toBe(true)

  expect(obj.res).toBe(5);
});
    • 或**

另一种选择是从函数返回一个对象,其中包括需要测试的布尔值以及内部变量。

function sum(a,b){
  var res = a+b;
  return {
    res,
    val: true
  };
}

test('sum of numbers', () => {
  const {res, val} = sum(2, 3);
  expect(val).toBe(true)
  expect(res).toBe(5);
});

我注意到你在一篇帖子的评论中提到
这是我项目中的一个要求,我必须测试函数内部的一个内部变量值
仔细检查一下,是否有可能这个需求实际上是要求你返回局部变量并比较它,而不是一个布尔值?如果是这样,你可以按照@epascarello的答案中概述的方法。希望这能有所帮助!

hts6caw3

hts6caw32#

测试应该是测试函数的结果。你不能访问函数内部的变量,因为变量的作用域是函数块,而不是全局的。
您的函数应该返回函数的结果,而您的测试应该测试您期望的输出。

function sum(a,b){
  var res = a + b;
  return res;
  // return a + b;
}
test('sum of numbers', () => {
  expect(sum(1,2)).toBe(3)
});
sd2nnvve

sd2nnvve3#

像这样的测试实现细节是前端测试的反模式。您应该测试调用此函数的用户交互(例如,单击按钮)。然后,检查屏幕上呈现的文本是否是您想要的结果(例如,1+1=2)。
项目需求要求直接测试一个功能,这是完全错误的。

evrscar2

evrscar24#

求和函数的基本测试用例

test('sum of numbers', () => {
expect(sum(1,2)).toBe(3)
});

也可以在toBe处使用toEqual。
甚至你可以检查这个职位https://jestjs.io/docs/getting-started .

相关问题