无法导入RulesTestContext和RulesTestEnvironment的Firestore规则测试问题
Firestore安全规则单元测试导入问题解决
问题原因
你使用的@firebase/rules-unit-testing v2.x版本已移除RulesTestContext和RulesTestEnvironment这两个导出项,这是v2版本的API重大变更,旧教程里的写法不再适用。
修复步骤
- 移除无效导入:删掉代码中对
RulesTestEnvironment和RulesTestContext的导入,v2版本无需显式引入这些类型。 - 修正变量声明:不需要给
testEnv、authenticatedUser、unauthenticatedUser指定类型,直接声明空变量即可。 - 修正断言调用:代码里的
testing.assertSucceeds是错误写法,直接使用导入的assertSucceeds即可。
修改后的test.js代码
import { equal } from 'assert'; import * as fs from 'fs'; import { assertFails, assertSucceeds, initializeTestEnvironment, } from "@firebase/rules-unit-testing"; const MY_PROJECT_ID = 'fir-flutter-3ec5c'; const testUserId = 'userId1'; describe('Firestore security rules', () => { let testEnv; let authenticatedUser; let unauthenticatedUser; beforeAll(async () => { testEnv = await initializeTestEnvironment({ projectId: MY_PROJECT_ID, firestore: { rules: fs.readFileSync("firestore.rules", "utf8"), host: 'localhost', port: 8080, } }); }); beforeEach(async () => { await testEnv.withSecurityRulesDisabled(context => { const firestoreWithoutRule = context.firestore(); return firestoreWithoutRule.collection('users').doc(testUserId).set({name: 'initial user name'}); }); authenticatedUser = testEnv.authenticatedContext(testUserId); unauthenticatedUser = testEnv.unauthenticatedContext(); }); it('Only authenticated Users can create', async () => { const createByAuthenticatedUser = authenticatedUser.firestore() .collection('users').add({name: 'user name authenticated'}); await assertSucceeds(createByAuthenticatedUser); }); });
额外说明
- v2版本的
initializeTestEnvironment返回的实例直接包含所需方法,无需依赖旧的类型标注。 - 确保Firebase模拟器版本与
@firebase/rules-unit-testing版本兼容,避免版本不匹配问题。
内容的提问来源于stack exchange,提问作者jorge
相关产品推荐
相关产品推荐

