我正在尝试在模拟器中测试Firebase云功能。我已经能够在模拟器中对数据进行火存储。我可以在模拟器中调用云函数。但是我删除集合的功能是向Google Cloud扩展,而不是在模拟器中执行操作。
要删除集合,Google建议您使用“ firebase_tools”执行操作(https://firebase.google.com/docs/firestore/solutions/delete-collections)。
这是我在模拟器中运行的云功能的简化版本:
//Delete a firestore document.
//When run in the emulator, this will successfully delete the piece of data in our emulator.
const paPath = FirebasePathUtils.getTeamPropertyAnalysisPath(pa.parentTeamId, pa.parentWorkspaceId, pa.id);
const p1 = admin.firestore().doc(paPath).delete();
//Delete all data in a collection.
//When run in the emulator this IS REACHING OUT TO THE REAL CLOUD NOT USING THE EMULATOR.
const paDataPath = FirebasePathUtils.getTeamPropertyAnalysisDataPath(teamId, wsId, paId);
const pa2 = firebase_tools.firestore
.delete(paDataPath, {
project: process.env.GCLOUD_PROJECT,
recursive: true,
yes: true,
token: functions.config().fb.token
})
.then( () => {
console.log(`Successfully Deleted data under ${paDataPath}`);
});
return Promise.all([p1, p2]);
当我在模拟器中运行cloud函数,并使用“ firebase_toosl”执行delete收集代码时,我得到了输出
Google API requested!
- URL: "https://firestore.googleapis.com/v1beta1/projects/reitools-test/databases/(default)/documents/teamdata/-LjcN--jRrirOzDD0e3I/workspace_data/-LjcN-vktqOC8BJR_8X1/property_analyses_data/-LgJZf7GLRetC2fsVRvb"
- Be careful, this may be a production service.
⚠ Google API requested!
- URL: "https://firestore.googleapis.com/v1beta1/projects/reitools-test/databases/(default)/documents/teamdata/-LjcN--jRrirOzDD0e3I/workspace_data/-LjcN-vktqOC8BJR_8X1/property_analyses_data/-LgJZf7GLRetC2fsVRvb:runQuery"
- Be careful, this may be a production service.
关于如何获得“ firebase_tools”以对模拟器执行操作的任何想法?
答案 0 :(得分:0)
我发现距您发布问题已经8个月了。希望您已经解决了问题。
如果不是,对于那些在这里居住的人来说,问题在于您的环境变量“ process.env.GCLOUD_PROJECT”。
我相信在您的测试中,您正在初始化类似的Firestore实例:
firebase.initializeAdminApp({ projectId: 'deletetest' }).firestore()
在这种情况下,您应该用'deletetest'覆盖GCLOUD_PROJECT变量,该变量是您模拟的项目实例的projectId。
就像
一样简单process.env.PROJECT_ID = 'deleteclub'
我认为使用Jest变量只会覆盖测试文件,因此,如果其他测试需要此环境变量,则不会导致任何问题,当然,您需要在需要的地方为每个测试覆盖该变量。
我希望这会使某人感到高兴:)
干杯!