#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
функции, нет простого способа протестировать эту функцию напрямую.
Если вы можете изменить свой код, то вы могли бы:
- Объявить
handleResponse
внеa
. - Еще лучше, передайте его в качестве аргумента
a
.
Если вы хотите сохранить текущий код, вы можете spy
включить console.log
и посмотреть, вызывается ли он.
const spy = jest.spyOn(console, 'log');
// your test code here
expect(spy).toHaveBeenCalled();