开玩笑-如何检查一个函数是否被另一个函数调用

时间:2020-06-25 20:29:54

标签: 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测试文件中,我有:

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。谁能帮助我,因为我似乎无法弄清楚。

1 个答案:

答案 0 :(得分:2)

您需要进行一些重构。为secondFunc保留相同的参考。 然后,您可以将其替换为模拟对象。

functions.js

const firstFunc = () => {
  const x = exports.secondFunc();
  return x;
};

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

exports.firstFunc = firstFunc;
exports.secondFunc = secondFunc;

单元测试结果:

 PASS  stackoverflow/62583841/functions.test.js (12.17s)
  ✓ test if secondFunc is called (3ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        13.779s