【发布时间】:2018-05-01 00:11:21
【问题描述】:
我正在使用 firebase-tools shell CLI 来测试 Firestore 云功能。
我的函数使用通配符响应特定集合中所有文档的 onCreate 触发器,然后使用更新调用改变该文档。
firestore
.document(`myCollection/{documentId}`)
.onCreate(event => {
const ref = event.data.ref
return ref.update({ some: "mutation"})
})
在 shell 中我运行类似这样的东西,(传递一些我的数据库权限所需的假身份验证数据):
myFunction({some: "data"}, { auth: { variable: { uid: "jj5BpbX2PxU7fQn87z10d4Ks6oA3" } } } )
但是这会导致错误,因为更新会尝试改变不在数据库中的文档。
错误:没有要更新的实体
在documentation about unit testing 中解释了如何为 event.data 创建模拟,以便在不接触实际数据库的情况下执行函数。
但是我试图调用一个真正的函数,该函数应该对数据库进行操作。模拟是没有意义的,否则这只不过是一个单元测试。
我想知道调用这样的函数的策略应该是什么?
通过使用文档的现有 id,该函数可以成功执行,但这似乎很麻烦,因为您需要在每次测试的数据库中查找它,并且在某些时候它可能不再存在。
我认为,如果 shell 能够以某种方式从您传入的数据创建一个新文档,并从中运行触发器,那将非常有帮助。这可能是可能的,还是有其他方法?
【问题讨论】:
-
使用这里描述的本地模拟器。您需要 Firebase CLI 3.15.1 或更高版本。 firebase.google.com/docs/functions/…
-
@DougStevenson 是的,我知道。您已经在我之前关于 Firestore 云功能的问题中回答了这个问题 :) 我使用的是最新版本。这主要是为了能够测试 onCreate 触发器,而不必在现有文档上调用它们。对不起,如果我不清楚。
-
我已更改标题以避免混淆
-
可以使用firebase shell模拟触发器stackoverflow.com/questions/46614685/…
标签: firebase google-cloud-functions google-cloud-firestore