有没有办法在本地运行firestore(例如测试目的)?
针对数据库编写测试的方法是什么(使用模拟除外)
答案 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
});
}