Puede probar la sincronización de funciones privadas usando espías sinon:
// app window.App = { const childFunc = function(){ console.log("in childFunc") } const parentFunc = function(){ this.childFunc() } const publicFuncs = function(){ ... // Make private functions available foe testing _private = { parentFunc: parentFunc, childFunc: childFunc } } return publicFuncs }() // tests const sandbox = sinon.createSandbox(); const app = new window.App(); beforeEach(function () { sandbox.spy(app._private); }); afterEach(function () { sandbox.restore(); }); const app = new window.App(); app._private.parentFunc() assert(app._private.childFunc.calledOnce) Lo que en realidad estás probando es que se llamó a la clave childFunc en app._private .
Sin embargo, si se llama a parentFunc de forma asincrónica, es decir,
const otherFunc = async function(){ await parentFunc() } Entonces, es posible que this palabra clave no esté definida dentro parentFunc cuando se ejecuta, lo que significa que no puede usar this.childFunc .
Puede llamar a childFunc() directamente, sin embargo, sinon no podrá detectar que se ha ejecutado childFunc , por lo que no puede probarlo.
¿Me estoy perdiendo algo aquí?