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

336
Vistas
prueba de unidad nodejs PubSub.publish no envía datos

Tengo problemas para realizar una prueba unitaria con el siguiente entorno:

 "pubsub-js": "^1.9.2", "@types/chai": "^4.2.14", "@types/mocha": "^8.2.0", "chai": "^4.2.0", "firebase-functions-test": "^0.2.3", "mocha": "^8.2.1", "ts-node": "^9.1.1", "ts-sinon": "^2.0.1",

Cuando publico un mensaje en mi pubsub, los datos que recibe siempre son: Message { data: undefined, attributes: {}, _json: undefined } y no puedo entender por qué.

Hay un código para describir mi escenario:

pubsub-myFunc.ts

 export const pubsubMyFunc= functions.pubsub .topic("on-myTopic") .onPublish(async (message) => { console.log("version 1") console.log(message) /** * Received message from topic */ const myMessage = Buffer.from(message.data, "base64").toString("utf-8")

pubsub-myFunc.spec.ts

 import * as functions from 'firebase-functions'; import * as PubSub from 'pubsub-js'; import * as tsSinon from 'ts-sinon'; import { pubsubMyFunc } from './pubsub-myFuncr'; import * as sendEmail from './send-mail'; describe("PubSub tests", () => { beforeEach(() => { process.env.GCLOUD_PROJECT = "my env" }) it("Should call sendNotificationMessage", function (done) { // this.timeout(60000) const today = new Date() const data = { dateCreated: today, expireDate: today.getDate() + 30, objId: "id", objParentId: "parentId", } const spy = tsSinon.default.spy(sendEmail, "sendNotificationMessage") const dataBuffer = Buffer.from(JSON.stringify(data)) const pubsubMessage = new functions.pubsub.Message(dataBuffer) PubSub.subscribe("on-myTopic", pubsubMyFunc) console.log("publish") PubSub.publish("on-myTopic", pubsubMessage) setTimeout(() => { // check if spy was called tsSinon.default.assert.calledOnce(spy) done() }, 15000) }) })

He intentado pasar directamente el dataBuffer pero sin suerte, los resultados de los registros de mi consola son:

 publish version 1 Message { data: undefined, attributes: {}, _json: undefined }

¿Hay alguna razón para que mi Message.data no esté definido?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No estoy seguro de si la función de subscribe pubsub-js es compatible con la salida del método onPublish de onPublish firebase-functions .

Puede usar los emuladores de firebase para ejecutar sus funciones localmente y probarlas enviando mensajes como lo haría normalmente en lugar de pasar por pubsub-js .

 export const pubsubMyFunc= functions.pubsub .topic("on-myTopic") .onPublish(async (message) => { console.log("version 1"); console.log(message); /** * Received message from topic */ const myMessage = message.json; ...

Asegúrese de que pubsubMyFunc se exporte en el punto de entrada de funciones de firebase.

Instale y configure los emuladores de Firebase, asegúrese de que PUBSUB_EMULATOR_HOST env var esté configurado en localhost:$PORT donde $PORT esté configurado en el puerto que configuró para el emulador pub sub, ubicado en firebase.json en emulators.pubsub.port .

Una vez que todo esté configurado, puede enviar un mensaje a pubsub de la siguiente manera:

 import {PubSub} from "@google-cloud/pubsub"; cont getTopic = () => { const topic = new PubSub().topic("on-myTopic"); topic.exists().then(([exists]) => exists ? topic : topic.create().then(([newTopic]) => newTopic) ); }; describe("PubSub tests", () => { let topic; beforeEach(async() => { process.env.GCLOUD_PROJECT = "my env" topic = await getTopic(); }); it("should test something", async() => { await topic.publishJSON(const data = { dateCreated: today, expireDate: today.getDate() + 30, objId: "id", objParentId: "parentId", }); // rest of your code here. }); });
over 4 years ago · Santiago Trujillo Denunciar

0

Esto funcionará en el proceso de pirateo.

 export const pubsubMyFunc= functions.pubsub .topic("on-myTopic") .onPublish(async (message) => { console.log("version 1");
over 4 years ago · Santiago Trujillo 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