【问题标题】:Firebase emulators with a message on pubsub topic not triggering cloud functions带有关于 pubsub 主题的消息的 Firebase 模拟器未触发云功能
【发布时间】:2021-07-12 23:29:20
【问题描述】:

我正在开发一个普通的 express 支持的 API 项目,该项目使用 firebase 函数来执行一些离线数据处理。 在许多情况下,API 会向 pub-sub 引发事件,该事件稍后会被云函数接收。 一个典型的例子是所有的聚合(日/月的总销售额)都被推送到云功能。

我正在寻找一个使用 firebase 模拟器的集成测试套件,我可以在其中从 API 层进行测试,直到触发云功能 及其对数据存储的更新。在模拟器上拥有集成测试套件为我在速度和成本方面提供了很好的优势以及快速的本地验证。

我正在使用 firebase 模拟器调用我的常规测试脚本

firebase emulators:exec "npm run test"

在运行测试时,我可以初始化所有 pubsub 函数。

随后我可以看到该消息也被推送到主题。

但是我没有看到相应的订阅 firebase 函数正在执行。我的firebase函数骨架是这样的

export const addIncentiveData = functions
    .region("asia-south1")
    .pubsub.topic("on_wf_data_added")
    .onPublish(async (message, context) => {
        const FUNCTION_NAME = `addIncentiveData`;
        console.log(`[${FUNCTION_NAME}] Entering `)
        const FUNCTION_NAME = `addIncentiveData`;
        logger.info(`[${FUNCTION_NAME}] : The function was triggered at ${context.timestamp}`);
        logger.debug(`[${FUNCTION_NAME}] : The message is ${JSON.stringify(message)}`);

        const payLoad = JSON.parse(Buffer.from(message.data, "base64").toString());
        logger.debug(`[${FUNCTION_NAME}] : The payload is ${JSON.stringify(payLoad)}`);
        
        //some processing

        logger.info(`[${FUNCTION_NAME}] : Completed processing`);
        return;
    });

【问题讨论】:

    标签: firebase google-cloud-functions integration-testing google-cloud-pubsub firebase-tools


    【解决方案1】:

    问题出在我的配置上。 mocha 测试调用 API,API 将消息推送到真正的 pubsub 主题。我必须输入变量以让我的 API 知道可以与模拟器一起使用。

    我将以下变量添加到我的 .env 中

    PUBSUB_EMULATOR_HOST=localhost:8085
    PUBSUB_PROJECT_ID=my-project
    

    随后,当模拟器运行时,我可以看到所有消息都被推送到模拟器。

    来源:Firebase PubSub Emulator not recieving messages

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2021-07-04
      • 2021-09-19
      • 2018-08-28
      • 2021-11-27
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多