Предположим, есть файл utils.ts такого вида (совсем утрированный пример), который надо протестировать с помощью Jest:
export function a(param: number): void {
const data = param * 2;
b(data);
}
export function b(param: number): void {
console.log(`This is param: ${param}`);
}
Функция b что-то делает с данными и может что-нибудь вернуть, с ее тестированием никаких проблем не будет. Вопрос в том, что делать с функцией a, которая может делать какие-то преобразования, но которая вызывает функцию b. Нужно либо как-то мокнуть b, либо отловить ее вызов. Была идея сделать так чтобы все функции принимали в себя в качестве аргументов все другие функции, которые они вызывают (что-то вроде dependency injection), но тогда во-первых получится, что все функции будут принимать коллбэки, а это не так легко читается, во вторых функции которые вызываются самыми первыми должны будут принимать весь код остальной программы в виде гигантского списка коллбэков. И еще такая проблема, что в конкретно данным случае, поскольку a вызывает только b, можно было бы сделать, чтобы a возвращала значение и b вызывалась снаружи, но в общем случае a может вызывать много разных функций и тогда это решение не подойдет. Может быть есть другой способ все это организовать, не создавая DI?