我正在为项目使用Firebase,并且正在使用以下代码来创建计划功能。我想在运行的每一分钟记录一条消息。
export const timedQuery = functions.pubsub.schedule('1 * * * *').onRun((context) => {
console.log("I am running")
return null;
})
我具有在http函数下工作的代码的主要逻辑,并且想要在部署到生产环境之前查看它是否在本地工作。通过Firebase文档,我已经下载了所有firebase模拟器,并使用“ firebase emulators:start”使其运行。从日志中看来,我的pubsub仿真器已在localhost:8085成功启动,并且pubsub函数已初始化,但是即使等待了2-3分钟,也没有任何输出。是否可以在本地测试预定功能?
我也是在Firebase上,因此我没有使用Google Cloud Scheduler就创建了它。
答案 0 :(得分:7)
Firebase本地模拟器当前不模拟实际的预定功能。 documentation说:
Firebase CLI包括一个可以模拟的Cloud Functions模拟器 以下功能类型:
- HTTPS函数
- 可调用函数
- Cloud Firestore功能
我建议向Firebase support提交功能请求。
部署预定功能时,实际上是在后台使用Google Cloud Scheduler。详细信息由您管理。如documentation中所述:
如果您要安排函数在指定时间运行,请使用functions.pubsub.schedule()。onRun()这种便捷的方法可以创建Google Cloud Pub / Sub主题,并使用Google Cloud Scheduler触发有关该主题的事件,确保您的功能按预期的时间表运行。
我建议将函数的代码重构为一种方法,您可以通过使用所选的测试框架直接调用它来进行测试。您也可以将其临时包装在HTTP函数中,然后以这种方式调用。
答案 1 :(得分:4)
实际上,有一个Firebase PubSub模拟器。要启用它,您需要安装最新的CLI(肯定已安装在8.2.0中)
在本地创建测试脚本以将PubSub消息提交到队列中
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const { PubSub } = require('@google-cloud/pubsub');
const pubsub = new PubSub();
exports.pubsubWriter = functions.https.onRequest(async (req, res) => {
console.log("Pubsub Emulator:", process.env.PUBSUB_EMULATOR_HOST);
const msg = await pubsub.topic('test-topic').publishJSON({
foo: 'bar',
date: new Date()
}, { attr1: 'value' });
res.json({
published: msg
})
});