运行Firestore本地,例如用于检测

时间:2017-10-04 11:38:03

标签: database firebase testing google-cloud-firestore

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

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

7 个答案:

答案 0 :(得分:15)

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

与此同时,我们建议使用单独的测试项目来涵盖这一点。每个项目的每日免费等级也有助于此。

答案 1 :(得分:7)

  

更新2018年11月:   至少出于测试Firestore规则的目的,本地仿真已使用at Firebase Summit 2018进行了@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)

这似乎很早,因为发行说明中没有对此进行说明,但是我敢肯定它会很快出现。

答案 2 :(得分:2)

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

int shift

用于运行执行

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);

<强> UPDATE !!!!有效写入和更新事件

firebase experimental:functions:shell < test.js

答案 3 :(得分:1)

可以使用gcloud在本地设置Firestore。

通过运行gcloud beta emulators firestore start --host-port=localhost:8081启动firestore模拟器,如果启动成功,您将看到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})

答案 4 :(得分:0)

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

gcloud beta emulators firestore start

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

这需要在系统PATH上安装Google Cloud SDK和Java 8+ JRE。

答案 5 :(得分:0)

有两个库试图简化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 emulator:需要google-cloud-sdk,并依赖单独的进程
4)独立的测试项目:依赖于互联网连接,这也意味着可能的配额限制/成本
5)firebase-server:仅支持实时数据库api,不支持Firestore

答案 6 :(得分:0)

现在,您可以通过设置本地主机来使用本地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