Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest-如何检查一个函数是否被另一个函数调用_Javascript_Node.js_Unit Testing_Jestjs - Fatal编程技术网

Javascript Jest-如何检查一个函数是否被另一个函数调用

Javascript Jest-如何检查一个函数是否被另一个函数调用,javascript,node.js,unit-testing,jestjs,Javascript,Node.js,Unit Testing,Jestjs,我正在使用Jest测试一些Javascript。在一个名为“function.js”的文件中,我有两个类似的函数: functions.js const firstFunc = () => { const x = secondFunc() return x } const secondFunc = () => { return '5' } module.exports = { firstFunc, secondFunc } 在我的Jest测试文件中,我有:

我正在使用Jest测试一些Javascript。在一个名为“function.js”的文件中,我有两个类似的函数:

functions.js

const firstFunc = () => {
  const x = secondFunc()
  return x
}

const secondFunc = () => {
  return '5'
}

module.exports = {
  firstFunc,
  secondFunc
}
在我的Jest测试文件中,我有:

const functions = require('./functions.js')

test('test if secondFunc is called', () => {
  const mockFunction = jest.fn()
  functions.secondFunc = mockFunction;
  functions.firstFunc()
  expect(mockFunction).toHaveBeenCalled()
})

事实上,我已经尝试过很多类似的变化。我无法让jest.fn()正常工作,我希望它正常工作。总的来说,我希望能够看到有关secondFunc的信息,比如它被调用了多少次,使用了什么参数等等,但我必须实际调用firstFunc。有人能帮我吗,因为我似乎无法解决这个问题。

你需要做一些重构。为
secondFunc
保留相同的引用。 然后可以用模拟对象替换它

functions.js

const firstFunc=()=>{
const x=exports.secondFunc();
返回x;
};
const secondFunc=()=>{
返回“5”;
};
exports.firstFunc=firstFunc;
exports.secondFunc=secondFunc;
单元测试结果:

PASS stackoverflow/62583841/functions.test.js(12.17s)
✓ 测试是否调用了secondFunc(3ms)
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:13.779秒

此代码在编写时无法进行测试。当您执行
functions.secondFunc=…
时,您只是覆盖模块导出的内容。不是实际的
secondFunc
函数,在
firstFunc
中有一个引用(它是一个
const
,更明显的是,它不是您实际要覆盖的内容)。可以找到一些有趣的解决方法。我觉得您测试
firstFunc
的方式打破了单元测试的规则,单元测试应该只关心给定输入的预期输出。@MarkoCen这个例子很简单,但有时,您的函数调用另一个函数的事实是单元测试的关键。例如,您可能希望检查您的函数是否使用正确的参数向某些API发出POST请求。在这种情况下,您可以模拟请求库(例如,
axios
),这样请求就不会发生,但您需要检查是否为其提供了正确的参数(并且您不测试
axios
是否真的发出了该请求,因为它有自己的测试)你能把测试本身也包括进去吗?@AKD和你的一样