尝试使用 jest 使用 v9 firestore sdk 初始化测试环境

Bor*_*ald 5 firebase firebase-security jestjs google-cloud-firestore

我正在尝试设置我的测试环境来使用 firestore 测试我的安全性。我从https://firebase.google.com/docs/rules/unit-tests#before_you_run_the_emulator复制了此代码

let testEnv : RulesTestEnvironment;

beforeAll(async () => {

    testEnv = await initializeTestEnvironment({
        projectId: "demo-project-1234",
        firestore: {
            rules: fs.readFileSync('firestore.rules', 'utf8'),
        },
    });

});
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误。

必须指定 firestore 模拟器的主机和端口。(您可以使用 firebase emulators:exec './your-test-script' 包装测试脚本以启用自动发现,或通过initializeTestEnvironment({firestore: {host, port}})手动指定。

有人知道如何解决这个问题吗?

编辑

我尝试将主机和端口添加到正在运行的模拟器中,如下所示

let testEnv : RulesTestEnvironment;

beforeAll(async () => {

    testEnv = await initializeTestEnvironment({
        projectId: "comment-section-e9c09",
        firestore: {
            rules: fs.readFileSync('firestore.rules', 'utf8'),
            host:'localhost',
            port:8080
        },
    });

});
Run Code Online (Sandbox Code Playgroud)

现在它似乎能够连接到我的模拟器,但是当我尝试 fx 清除数据库时

test("sefse", () => {
    testEnv.clearDatabase()
})
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

[UnhandledPromiseRejection:此错误的根源是在没有 catch 块的情况下抛出异步函数内部,或者拒绝未使用 .catch() 处理的 Promise。该承诺被拒绝,原因是“错误:必须指定数据库模拟器的主机和端口。(您可以使用 'firebase emulators:exec './your-test-script'' 包装测试脚本以启用自动发现,或者通过initializeTestEnvironment({database: {host, port}})手动指定。".] {

小智 0

您是否像这样在 firebase.json 文件中指定了 firestore 端口和规则路径?

"emulators": {
  "firestore": {
    "port": 8080
  }
},
"firestore": {
  "rules": "./rules/firestore.rules"
}
Run Code Online (Sandbox Code Playgroud)