36

有没有办法在本地运行firestore(例如用于测试目的)?

针对数据库编写测试的方法是什么(使用模拟除外)

4

7 回答 7

22

2020 年更新:

现在还有一个Firebase Emulator Suite

2018 年 11 月更新:

本地模拟(至少出于测试 Firestore 规则的目的)在 2018 年 Firebase 峰会上进行了演示,使用@firestore/testing并记录在Test your Cloud Firestore Security Rules中。

看起来它是这样的:

const firebase = require(`@firebase/testing`)
const app = firebase.initializeTestApp({
  projectId: 'my-project',
  auth: { uid: '123', email: 'name@domain.com' }
})

const attempt = app.firestore()
  .collection('colId').doc('docId').get()
firebase.assertFails(attempt)
firebase.assertSucceeds(attempt)

这似乎是早期的,因为它没有在发行说明中注明,但我相信它会出现。

于 2018-11-08T19:06:34.623 回答
19

目前没有,但请继续关注,因为这是我们想要提供的东西。

同时,我们建议使用一个单独的测试项目来解决这个问题。每个项目的每日免费套餐也对此有所帮助。

于 2017-10-04T13:55:08.800 回答
7

您可以通过运行以下命令来运行 Firestore 模拟器:

gcloud beta emulators firestore start

然后FIRESTORE_EMULATOR_HOST根据控制台输出设置环境变量(例如 run export FIRESTORE_EMULATOR_HOST=::1:8505)。

这需要在您的系统路径上安装Google Cloud SDK和 Java 8+ JRE。

于 2019-05-22T00:48:20.297 回答
2

对于 Firestore 测试,编写一个 js 示例 test.js,您可以使用此格式示例测试编写

var data = {
        value: {createTime: new Date(),
                updateTime: new Date(),
                fields:{

                        name:{stringValue:'new value data'},
                        age:{integerValue:50}
                      }
        },
        oldValue: {createTime: new Date(),  //old create time
                updateTime: new Date(),  //old update time time
                fields:{

                        name:{stringValue:'olvalue data'},
                        age:{integerValue:50}
                      }
        }
      };
testFireStoreEvent(data);

对于运行执行

firebase experimental:functions:shell < test.js

更新!!!!适用于写入和更新事件

var data = {
    before: {  
          //your before data

    },
    after: {

        //your after data
     }
  };
testFireStoreEvent(data);
于 2017-11-12T22:11:12.487 回答
1

Firestore 可以在本地使用gcloud.

通过运行启动 Firestore 模拟器gcloud beta emulators firestore start --host-port=localhost:8081,如果它启动成功,您将看到Dev App Server is now running

如果您正在使用,则以@google-cloud/firestore这种方式创建 Firestore 实例

// Firestore instance only for test env
const { Firestore } = require('@google-cloud/firestore')
const instance = new Firestore({ projectId; 'Your project id', host: 'localhost', 'port': 8081})
于 2020-04-18T10:01:14.737 回答
1

有两个库试图促进对 firebase sdk 的模拟。

1) https://github.com/soumak77/firebase-mock
2) https://github.com/mikkopaderes/mock-cloud-firestore

我目前使用第一个,因为它似乎实现了更多的 SDK。

它们并不完美,但它们目前足以满足我的需求,并且比其他方法更可取,因为它们完全在进行中。

请注意,如果从 Webpack/web 代码中按原样使用 firebase-mock (#1) 确实会导致 webpack 错误。要解决,您可以使用选项 #2 (mock-cloud-firestore),或使用此处提到的解决方法(直到合并修复):https ://github.com/soumak77/firebase-mock/issues/157#issuecomment -545387665

其他选项:

3) Firestore 模拟器:需要 google-cloud-sdk,并且依赖于一个单独的进程
4) 单独的测试项目:依赖于互联网的连接,这也意味着可能的配额限制/成本
5) firebase-server:只支持实时-database api,而不是 Firestore

于 2019-10-23T10:58:21.730 回答
1

现在您可以选择通过设置本地主机来使用本地 Firestore 模拟器:

var db = firebaseApp.firestore();
if (location.hostname === "localhost") {
  db.settings({
    host: "localhost:8080",
    ssl: false
  });
}

https://firebase.google.com/docs/emulator-suite/connect_and_prototype#instrument_your_app_to_talk_to_the_emulators

于 2020-05-06T14:26:55.167 回答