Unit testing emulator中firebase规则的简单单元测试总是失败
我正在尝试为我的firestore规则设置单元测试,并且我遵循了,但是由于某种原因,Unit testing emulator中firebase规则的简单单元测试总是失败,unit-testing,google-cloud-firestore,firebase-security,Unit Testing,Google Cloud Firestore,Firebase Security,我正在尝试为我的firestore规则设置单元测试,并且我遵循了,但是由于某种原因,firebase.AssertSuccessed.(testDoc.get())始终通过,即使根据安全规则我不允许 安全规则: rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if
firebase.AssertSuccessed.(testDoc.get())
始终通过,即使根据安全规则我不允许
安全规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
单元测试:
process.env.FIRESTORE_EMULATOR_HOST = 'localhost:8090';
const assert = require('assert');
const firebase = require('@firebase/testing');
const PROJECT_ID = 'my-proj-id';
describe("Security Rules",()=>{
it("monkeytest", async()=>{
const db = firebase.initializeTestApp({projectId:PROJECT_ID}).firestore();
const testDoc = db.collection("foo").doc('bar');
await firebase.assertSucceeds(testDoc.get());
})
});
无论我在安全规则中做了什么更改,这个单元测试总是通过的。当我使用
firebase.assertFails(testDoc.get())
时,不管我做了什么更改,测试总是会失败。我正在使用emulator或firebase tools 9.6.0版来检查您的,请运行以下命令:
firebase tools --version
firebase emulators:start
在此版本中,您在firestore.rules
中所做的每一项更改都应重新启动仿真器以生效Ctrl-C
取消当前模拟器并再次运行它(确保保存了firestore.rules
中的更改),方法是执行以下命令:
firebase tools --version
firebase emulators:start
我使用的是9.3.0版
,现在更新到9.6.1
。同样的问题,当我现在取消仿真器并再次运行测试时,测试也通过了,没有像以前那样的“客户端处于脱机状态”。我正在使用mocha和@firebase/testing
,因此出于某种原因,即使我在firebase.json
中指定了另一个端口,后台仍有一个模拟器在8080端口上运行。单元测试总是针对这个仿真器进行测试,这意味着对另一个仿真器的任何更改/重新启动都没有效果。安全规则没有像您提到的那样自动更新的bug没有在8080更新模拟器。