издевательство над внутренней функцией другой функции с помощью 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, data, false)
       }else{
           callApi()
       }
   }
}
 

в соответствии с приведенной выше функцией, как мы можем убедиться, вызывается handleResponse или нет.

мой обходной путь заключается в следующем

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

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

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

Комментарии:

1. Вложенная функция — это деталь реализации, проверьте поведение . В этом случае: регистрируется ли результат?

Ответ №1:

Поскольку ваша handleResponse функция объявлена внутри a функции, нет простого способа протестировать эту функцию напрямую.

Если вы можете изменить свой код, то вы могли бы:

  1. Объявить handleResponse вне a .
  2. Еще лучше, передайте его в качестве аргумента a .

Если вы хотите сохранить текущий код, вы можете spy включить console.log и посмотреть, вызывается ли он.

   const spy = jest.spyOn(console, 'log');
  // your test code here
  expect(spy).toHaveBeenCalled();