1

我有 dh.js

const checkDExistsCallback = (err, dResp) => {
  if (err)    
    cbResp.error('failed');    

  if (dResp.length > 0) 
    checkDCollectionExists();  
  else 
    cbResp.error('Not found.');  
};
    
const checkDCollectionExists = () => 
{  
  let query = `select sid from tablename where sid = '${objRequestData.dName}' limit 1;`;
  genericQueryCall(query, checkDCollCallback);
}

module.exports = {checkDExistsCallback , checkDCollectionExists }

在我的 dh.test.ts

const dhExport = require("./DensityHookReceive");
dhExport.checkDCollectionExists = jest.fn().mockImplementation(() => {});

test('check req dh is exists', () => {
  dhExport.checkDExistsCallback(false, '[{}]');
  expect(dhExport.checkDCollectionExists).toBeCalled(); 
});

在 dh.js中, checkDExistsCallback函数在满足 'if' 条件后被调用checkDCollectionExists 。当您查看 dh.test.ts 文件时,我一开始就模拟了 checkDCollectionExists 函数,但是在运行测试时它没有调用模拟函数,而是调用了实际函数。你能帮我弄清楚吗?

4

1 回答 1

1

不能模拟在其定义的同一模块中使用的函数,除非它始终用作可以模拟的对象上的方法,例如

  if (dResp.length > 0) 
    module.exports.checkDCollectionExists();  

代替

  if (dResp.length > 0) 
    checkDCollectionExists();  

checkDCollectionExists需要移动到另一个模块,或者需要将两个功能作为一个单元进行测试。这是需要模拟的数据库调用。

于 2020-08-10T07:52:46.067 回答