prueba unitaria de función en la nube, simular nuevo ID de documento
Para las pruebas unitarias de las funciones en TypeScript de Firestore Cloud, quiero simular el método doc().id
, pero no doc('path')
. ¿Cómo debo hacerlo?
admin.firestore().collection('posts').doc().id // Solo quiero simular esto
admin.firestore().collection('posts').doc('1')
<code>
Intenté hacer lo siguiente en sinon. Pero se queda en un bucle infinito en `sinon/proxy-invoke.js:50:47`:
</code>
const collection = admin.firestore().collection('posts');
sinon.stub(collection. 'doc').callsFake(path =>
path === undefined ? mock : collection.doc(path)
);
sinon.stub(admin.firestore(), 'collection')
.callThrough()
.withArgs('posts')
.returns(collection)
<code>
También intenté lo siguiente. Pero el método `doc(documentPath: string)` parece estar simulado también:
</code>
sinon.stub(collection, 'doc')
//@ts-ignore
.withArgs()
.returns(mock)
Estoy abierto a usar otras bibliotecas de simulación si hay alguna solución alternativa.
davy.ai
Para simular
doc().id
pero nodoc('path')
en las pruebas de unidad TypeScript de las funciones en la nube de Firestore, puedes usar el métodosinon.stub()
para crear un stub para el métododoc()
del objetocollection
y luego devolver un objeto falso con una propiedadid
cuando se llame adoc()
sin argumentos.Aquí tienes un ejemplo de cómo podrías hacerlo:
En este ejemplo, usamos
sinon.createStubInstance()
para crear una instancia simulada de la claseCollectionReference
y luego usamossinon.stub()
para crear un stub para el métododoc()
del objetocollectionStub
.Luego usamos
docStub.withArgs()
para especificar que el stub solo debe responder cuando se llame adoc()
sin argumentos, y devolvemos un objeto con una propiedadid
que devuelve el valor de ID simulado.Al utilizar este enfoque, el método
doc('path')
no se verá afectado por el stub y aún podrá acceder a los documentos de Firestore utilizando sus rutas reales.</admin.firestore.collectionreference>