Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

139
Vistas
testEnv.firestore.makeDocumentSnapshot (datos, ruta) no está creando un nuevo documento

Configuración de las funciones de firebase de pruebas unitarias (modo en línea).

Estoy probando una función onCreate(), por lo que necesito crear un documento en firestore para asegurarme de que la función se active y funcione correctamente. El problema que encuentro es que testEnv.firestore.makeDocumentSnapshot(data, path) no está creando un nuevo documento. Si el documento ya existe, puedo escribirle estos datos y activar la función onCreate(), pero si no existe obtengo un Error: 5 NOT_FOUND: No document to update cuando ejecuto la prueba.

prueba.ts

 const functions = require("firebase-functions-test"); const testEnv = functions({ databaseURL: "https://***.firebaseio.com", storageBucket: "***.appspot.com", projectId: "***", }, "./test-service-account.json"); import "jest"; import * as admin from "firebase-admin"; import { makeLowerCase } from "../src"; describe("makes bio lower case", () => { let wrapped: any; beforeAll(() => { wrapped = testEnv.wrap(makeLowerCase); }); test("it converts the bio to lowercase", async () => { const path = "/animals/giraffe"; const data = {bio: "GIRAFFE"}; const snap = testEnv.firestore.makeDocumentSnapshot(data, path); await wrapped(snap) const after = await admin.firestore().doc(path).get(); expect(after?.data()?.bio).toBe("giraffe"); }); });

hacerLowerCase.ts

 import * as functions from "firebase-functions"; import * as admin from "firebase-admin"; export const makeLowerCase = functions.firestore .document("animals/{animalId}") .onCreate((snap, context) => { const data = snap.data(); const bio = data.bio.toLowerCase(); return admin.firestore().doc(`animals/${snap.id}`).update({bio}); });

Puedo arreglar esto en makeLowerCase.ts devolviendo:

 admin.firestore().doc(`animals/${snap.id}`).set({bio}, {merge: true});

O creando el documento con admin en la prueba:

 await admin.firestore().doc(path).set(data);

Pero testEnv.firestore.makeDocumentSnapshot(data, path); debería estar creando un documento, creo, ¿no?

¿Es este un error o un comportamiento esperado de firebase-functions-test" ?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

makeDocumentSnapshot(data, path) no creará un documento real, solo falsifica un objeto QueryDocumentSnapshot sin interactuar con ninguna base de datos real; piense en ello como "hacer un objeto DocumentSnapshot".

Si bien su Cloud Function puede asumir correctamente que el documento existe porque así es como se activa, tendría que escribir un documento en la base de datos para que actúe si desea seguir usando update(...) en su lugar. de set(..., { merge: true }) .

Por lo tanto, deberá agregar al menos:

 await admin.firestore().doc(path).set(data);

y luego puedes usar cualquiera de estos:

 const snap = testEnv.firestore.makeDocumentSnapshot(data, path); // OR const snap = await admin.firestore().doc(path).get();
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda