Go 如何从Gcloud beta模拟器firestore中删除所有文档?

Go 如何从Gcloud beta模拟器firestore中删除所有文档?,go,google-cloud-firestore,gcloud,Go,Google Cloud Firestore,Gcloud,我正在创建一些简单的应用程序来学习Firestore 我启动本地Firestore Emulator时使用了: $gcloud测试版仿真器firestore启动 启动模拟器后,我使用“go test”运行测试 我用数据填充Firestore,并创建了一个查询添加的一些记录/文档的函数 我从我的应用程序中删除了一些文档,但它们继续显示在查询中 我试过: 使用ctrl-c和ctrl-d进行回采 $gcloud测试版仿真器firestore站点 重新启动我的Macbook,但文档仍然存在 我不明白

我正在创建一些简单的应用程序来学习Firestore

我启动本地Firestore Emulator时使用了:

$gcloud测试版仿真器firestore启动

启动模拟器后,我使用“go test”运行测试

我用数据填充Firestore,并创建了一个查询添加的一些记录/文档的函数

我从我的应用程序中删除了一些文档,但它们继续显示在查询中

我试过:

  • 使用ctrl-c和ctrl-d进行回采

  • $gcloud测试版仿真器firestore站点

  • 重新启动我的Macbook,但文档仍然存在

我不明白重启计算机后数据存储是如何持久化的,我猜数据存储在JSON文件或类似文件中

我搜索了模拟器,但找不到模拟器上的任何文档

我应该启动模拟器,然后对模拟的Firestore运行测试吗?

如何冲洗Firestore?

您可以使用:

module.exports.teardown = async () => {
  Promise.all(firebase.apps().map(app => app.delete()));
};

现在,每次调用
teardown
,都将从Firestore emulator中删除所有数据。

emulator支持一个端点来清除数据库():


填写
端口
项目名称

因为您使用的是Go,下面是我实现的一个小测试助手,它可以帮助启动仿真器,等待它出现,清除现有数据,初始化客户端,并在完成后关闭操作程序

它使用了Juan答案中的技巧(你应该将其标记为答案)

要使用此实用程序,您只需说:

client := startFirestoreEmulator(t)
源代码:

//版权所有2021 Ahmet Alp Balkan
//
//根据Apache许可证2.0版(以下简称“许可证”)获得许可;
//除非遵守许可证,否则不得使用此文件。
//您可以通过以下方式获得许可证副本:
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//除非适用法律要求或书面同意,软件
//根据许可证进行的分发是按“原样”进行分发的,
//无任何明示或暗示的保证或条件。
//请参阅许可证以了解管理权限和权限的特定语言
//许可证下的限制。
//包firestoretestutil包含用于启动firestore的测试实用程序
//用于单元测试的本地模拟器。
包firestoretestutil
进口(
“字节”
“上下文”
“fmt”
“净额”
“net/http”
“操作系统”
“os/exec”
“同步”
“测试”
“时间”
firestore“cloud.google.com/go/firestore”
)
const firestoreEmulatorProj=“虚拟仿真器firestore项目”
//cBuffer是一种可同时使用的缓冲区安全。
类型cBuffer struct{
b字节。缓冲区
同步互斥
}
func(c*cBuffer)写入(p[]字节)(n int,err error){
c、 锁()
延迟c.解锁()
返回c.b.Write(p)
}
func StartEmulator(t*testing.t,ctx context.context)*firestore.Client{
t、 助手()
端口:=“8010”
地址:=“本地主机:”+端口
ctx,cancel:=上下文。带取消(ctx)
t、 清理(func(){
t、 日志(“关闭firestore操作员”)
取消
})
//TODO调查为什么仍然有java进程悬而未决
//尽管我们杀死了exec'd命令,怀疑/bin/bash包装器是gcloud
//适用于整个java过程。
cmd:=exec.CommandContext(ctx,“gcloud”、“beta”、“模拟器”、“firestore”、“start”、“--host port=“+addr”)
out:=&cBuffer{b:bytes.Buffer{}
cmd.Stderr,cmd.Stdout=out,out
如果错误:=cmd.Start();错误!=nil{
t、 Fatalf(“启动firestore仿真器失败:%v--out:%s”,错误,out.b.String()
}
dialCtx,clean:=context.WithTimeout(ctx,time.Second*10)
推迟清理
无功连通布尔
为!已连接{
挑选{

案例重新启动dev计算机后数据如何持久化?这看起来像一个Node.js片段。我正在Golang中编码。只是为了确定,您是否设置了
FIRESTORE\u EMULATOR\u HOST=::1:PORT
env变量以将您的应用程序连接到模拟器?不,我没有这样做。我只是用“go test”运行一些测试如果您没有设置
FIRESTORE\u EMULATOR\u HOST
,那么您可能正在连接到项目的云FIRESTORE数据库,而不是本地模拟器。您的目标是使用模拟器进行本地测试吗?请注意,模拟器是可选的。如果您正在创建简单的应用程序进行学习,则您应该可以连接到真实的数据库并进行测试使用。
client := startFirestoreEmulator(t)