node.js - Firebase 函数:shell < test.js 示例
问题描述
Firebase Functions 有几种测试方法——一种是firebase functions:shell
手动运行和提供对象。这对于简单的事情很好,但我想传入一个数据文件或一个测试文件,firebase functions:shell < test.js
来自这个旧博客文章
由于不熟悉使用 node 作为 REPL 或这篇博文中提到的特殊命令,我很难让某些东西工作。
我有一个简化的触发器,看起来像:
export const onCreateUser = functions.firestore
.document("/users/{id}")
.onCreate(async snapshot => {
console.log("starting...");
const data = snapshot.data() as UserDocumentData;
console.log(data);
});
使用如下所示的 test.js:
var data = { foo: 123 };
onCreateUser(data);
runningfirebase functions:shell < test.js
给了我一些输出,但跳过了starting...
console.log 部分:
->firebase functions:shell < src/test.js
⚠ Your requested "node" version "10" doesn't match your global version "14"
i functions: Loaded functions: onCreateUser
⚠ functions: The following emulators are not running, calls to these services will affect production: firestore, database, pubsub
firebase > var data = { foo: 123 };
undefined
firebase > onCreateUser(data);
'Successfully invoked function.'
firebase > ⚠ Your function was killed because it raised an unhandled error.
我需要在我的测试文件中导入该函数,还是我遗漏了其他东西?我正在寻找一种更快的方法来进行一些基本的集成测试。
这是在打字稿环境中,如果这很重要的话。
解决方案
您将无法像这样将 TypeScript 直接发送到 Firebase CLI,尤其是如果它具有特定于 TS 的语法,例如as UserDocumentData
您在此处显示的部分。需要将 TypeScript 转换为纯 JavaScript,然后 nodejs 解释器才能理解它。
您可能需要进行一些挖掘以查看导致输出“您的函数已被终止,因为它引发了未处理的错误”的错误。我相信 Firebase CLI 会将调试信息发送到当前目录中的日志文件。
推荐阅读
- chart.js - 在加载数据和图表之前覆盖加载指示器
- python - if else 块上的 SQLAlchemy 混合属性
- c# - 开头的表达式调用给出了 AmbiguousMatch 异常
- real-time - 当实时系统违反其硬时间目标时会发生什么?
- c# - 无法将这种格式“1/29/2020 12:00:00 AM”的字符串解析为有效的 DateTime
- dns - 子域的附加 MX 记录
- java - First Auth Mifare Plus 卡
- spring-boot - Spring Boot SSL/HTTPS 使用嵌入式 Tomcat 设置,设置密码的最佳实践
- html-lists - open layers6: reproject epsg 28992 to epsg 4326
- python - Python:绘制直方图,其中 y 值小于 1