Estoy taladrando propiedades con sinon. Tengo problemas para entender cómo funciona el espionaje relacionado. La mayoría de los métodos de espionaje sinon parecen estar relacionados con las llamadas a funciones y no con el acceso a las propiedades de los objetos. Como solución alternativa, creé una variable para rastrear el acceso a la propiedad y la configuré manualmente cuando se llama a la función getter relacionada. Vea el ejemplo de código a continuación. Esto parece funcionar bien, pero siento que probablemente estoy duplicando alguna funcionalidad que ya existe en sinon. ¿Cuál sería una forma más idiomática de lograr el mismo resultado?
const sinon = require('sinon'); const lib = require('./lib'); const app = require('./app'); const sandbox = sinon.createSandbox(); let fooAccessed = false; sandbox.stub(lib, 'foo').get(() => { fooAccessed = true; return 123 }); app(); expect(fooAccessed).toEqual(true);Sé que esta probablemente no sea la respuesta que desea, porque no uso "sinon", pero responderé de todos modos. Quizás esto te ayude de alguna manera.
Puede usar un objeto Proxy para interceptar el acceso a un objeto.
const obj = { foo: "bar", baz: true }; let accessed = false; const proxied = new Proxy(obj, { get(target, prop) { if (prop === "foo") { accessed = true; } return target[prop]; } }); console.log(proxied, accessed); console.log(proxied.foo); console.log(proxied, accessed);Resultado:
{ foo: 'bar', baz: true } false bar { foo: 'bar', baz: true } true