У меня есть файл, который экспортирует одну функцию, которая зависит от частной:
function __a(filePath, someFunction){
// do some file request
someFunction(filePath)
}
function b(filePath){
__a(filePath, require)
}
module.exports = {
b: b
}
И я хотел бы проверить, что у частной функции __atoHaveBeenCalledWith есть некоторые параметры, поэтому __a на самом деле не пытается получить какой-то файл, в существовании которого я не уверен.
Я понимаю концепцию, что когда я импортирую b, я получаю ссылку на функцию, а __a просто живет в ее рамках, и я не могу иметь к ней доступ, поэтому использую такие вещи, как:
import appResources from './index';
// ... test
jest.spyOn(applicationResources, '__a').mockImplementationOnce(myParams);
Как я могу избежать выполнения __a здесь и убедиться, что он был вызван?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Невозможно имитировать или шпионить за существующей функцией, которая не используется в качестве метода.
__a и b должны либо находиться в разных модулях, либо a следует использовать как метод в одном модуле. Для модулей CommonJS существует существующий объект exports, который можно использовать:
exports.__a = function __a(filePath, someFunction){
// do some file request
someFunction(filePath)
}
exports.b = function b(filePath){
exports.__a(filePath, require)
}
Обратите внимание, что module.exports не заменяется, иначе его нельзя будет назвать exports.
Если вы тестируете
b, вы не должны издеваться над другими частями его модуля. Если вы тестируете что-то, что используетb, оно вообще не должно знать о__a.