使用jestjs模拟另一个函数的内部函数

使用jestjs模拟另一个函数的内部函数,jestjs,Jestjs,尝试使用jest模拟内部函数,但未能实现,原始函数如下 function a(param1, param2, callback){ let handleResponse = (err, result, fresh) { console.log(result) } redis.cache.get('cacheKey', data => { if(data !== null){ handleResponse(null, dat

尝试使用jest模拟内部函数,但未能实现,原始函数如下

function a(param1, param2, callback){
   let handleResponse = (err, result, fresh) {
      console.log(result)
   }

   redis.cache.get('cacheKey', data => {
       if(data !== null){
           handleResponse(null, data, false)
       }else{
           callApi()
       }
   }
}
根据上述函数,我们可以确定是否调用了HandlerResponse

我的解决方法如下

describe('someFunction', () => {
     it('should call handleResponse if no cache value', () => {

        redis.cache.get = jest.fn().mockImplementation((mockCacheKey, callback) => 
            callback('mock_data'));

       
        expect(handleResponse).toBeCalled();
    });
});

由于
handleResponse
函数是在
a
函数中声明的,因此没有直接测试该函数的简单方法

如果您可以更改代码,那么您可以:

  • a
    之外声明
    handleResponse
  • 更好的是,将其作为参数传递给
    a
  • 如果您想保留当前代码,您可以在
    控制台上
    spy
    。log
    并查看它是否被调用

    constspy=jest.spyOn(控制台,'log');
    //您的测试代码在这里
    期望(间谍)。已被调用();
    
    嵌套函数是一个实现细节,请测试其行为。在这种情况下:是否记录结果?