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í?