Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何在不使用现有文档的情况下在Firestore云函数shell中触发onCreate_Firebase_Google Cloud Functions_Google Cloud Firestore - Fatal编程技术网

Firebase 如何在不使用现有文档的情况下在Firestore云函数shell中触发onCreate

Firebase 如何在不使用现有文档的情况下在Firestore云函数shell中触发onCreate,firebase,google-cloud-functions,google-cloud-firestore,Firebase,Google Cloud Functions,Google Cloud Firestore,我正在使用firebase tools shell CLI测试Firestore云功能 我的函数使用通配符响应特定集合中所有文档的onCreate触发器,然后使用更新调用对该文档进行修改 firestore .document(`myCollection/{documentId}`) .onCreate(event => { const ref = event.data.ref return ref.update({ some: "mutation"

我正在使用firebase tools shell CLI测试Firestore云功能

我的函数使用通配符响应特定集合中所有文档的onCreate触发器,然后使用更新调用对该文档进行修改

firestore
    .document(`myCollection/{documentId}`)
    .onCreate(event => {
      const ref = event.data.ref
      return ref.update({ some: "mutation"})
    })
在shell中,我运行类似这样的操作(传递数据库权限所需的一些伪身份验证数据):

但这会导致错误,因为更新会尝试更改数据库中不存在的文档

错误:没有要更新的实体

在中,说明了如何为event.data创建mock,以便在不接触实际数据库的情况下执行函数

然而,我试图调用一个真正的函数,它应该在数据库上运行。模拟是没有意义的,否则这只不过是一个单元测试

我想知道调用这样一个函数的策略应该是什么

通过使用文档的现有id,函数可以成功执行,但这似乎很麻烦,因为每次测试都需要在数据库中查找它,并且在某个时候它可能不再存在


我认为,如果shell能够以某种方式从您传入的数据创建一个新文档,并从中运行触发器,这将非常有用。这是可能的,还是有其他方法?

云函数模拟器只能模拟项目中可能发生的事件。它不会模拟可能触发它的数据库的实际更改

正如您所发现的,当您的函数依赖于之前发生的实际更改时,您可能会遇到问题。事实上,在您处理函数中的事件时,完全有可能已删除创建的文档(假设用户快速删除,但事件因任何原因而延迟)


综上所述,也许您希望与SetOptions一起使用,这表明您希望合并而不是覆盖。请记住,如果文档在事件触发之前被删除(有充分的理由),您将无条件地重新创建文档,这可能不是用户想要的

可能重复使用本地仿真器,如下所述。您需要Firebase CLI版本3.15.1或更高版本@是的,我知道。在我之前关于Firestore云功能的问题中,您已经回答了这个问题:)我使用的是最新版本。这主要是关于能够测试onCreate触发器,而不必在现有文档上调用它们。如果我不清楚,很抱歉。我已经更改了标题以避免混淆。您可以使用firebase外壳模拟触发器。是的,有意义。我希望shell能够提供一种基于传入参数创建新文档的方法。对于测试onCreate处理程序,我认为这会很有帮助,但也许我应该用单元测试来涵盖这种测试,或者在我的数据库中创建我知道不会消失的特殊测试文档。我的大多数云函数都响应onCreate事件,因此shell对我来说不是一种方便的测试方法。
myFunction({some: "data"}, { auth: { variable: { uid: "jj5BpbX2PxU7fQn87z10d4Ks6oA3" } } } )